按嵌套值排序哈希值

我的哈希看起来如下。 我希望输出是相同的哈希forms,但根据价格排列哈希。

{ 1=>{ "name"=>"Mark", "date"=>"27/08/2015", "bed"=>"3", "furnish"=>"Fully", "size"=>"10", "price"=>790000 }, 2=>{ "name"=>"Mark", "date"=>"27/08/2015", "bed"=>"3", "furnish"=>"Fully", "size"=>"10", "price"=>720000 }, 3=>{ "name"=>"Mark", "date"=>"27/08/2015", "bed"=>"3", "furnish"=>"Fully", "size"=>"10", "price"=>750000 }, 4=>{ "name"=>"Mark", "date"=>"27/08/2015", "bed"=>"3", "furnish"=>"Fully", "size"=>"10", "price"=>710000 } } 

我读过如何按数值对Ruby Hash进行排序? 但它只是一个嵌套的哈希。 对我如何实现这一目标完全无能为力。 如果你们中的任何人愿意帮助我,将不胜感激。

试试这个:

 > myhash.sort_by{|_,v| v["price"]}.to_h #=> { 4=> { "name"=>"Mark", "date"=>"27/08/2015", "bed"=>"3", "furnish"=>"Fully", "size"=>"10", "price"=>710000 }, 2=> { "name"=>"Mark", "date"=>"27/08/2015", "bed"=>"3", "furnish"=>"Fully", "size"=>"10", "price"=>720000 }, 3=> { "name"=>"Mark", "date"=>"27/08/2015", "bed"=>"3", "furnish"=>"Fully", "size"=>"10", "price"=>750000 }, 1=> { "name"=>"Mark", "date"=>"27/08/2015", "bed"=>"3", "furnish"=>"Fully", "size"=>"10", "price"=>790000 } } 

更新:

如果您的字符串价格为"15,000"那么您可以删除逗号分隔符并将其转换为整数,如:

 > "15,000" > "15,000".tr(',', '').to_i #=> 15000 

所以代码就像:

 > myhash.sort_by{|_,v| v["price"].tr(',', '').to_i}.to_h 

如果您的数据(哈希)已分配给变量h那么您可以使用以下代码按price进行排序:

h.sort_by {|key, value| value['price'].to_f}

它为您提供了一组[key,value]对。 要将其转换回哈希值,您可以使用:

Hash[h.sort_by {|key, value| value['price'].to_f}]

在最新版本的Ruby (2.1+)中,您也可以使用to_h方法。

更新:

因为您将价格更改为数值, to_f不再需要to_f转换。 所以最终的代码如下所示:

h.sort_by {|key, value| value['price']}.to_h