按嵌套值排序哈希值
我的哈希看起来如下。 我希望输出是相同的哈希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