我的哈希看起来如下。我希望输出采用相同的哈希形式,但根据价格排列哈希。
{
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
}
}
我已从How to sort a Ruby Hash by number value?读取,但它只是一个嵌套哈希。对我如何实现这一目标完全无能为力。如果你们中的任何一个愿意帮助我,我们将不胜感激。
答案 0 :(得分:5)
试试这个:
> 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
答案 1 :(得分:1)
如果您的数据(哈希)已分配给变量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
转换。所以最终的代码如下:
h.sort_by {|key, value| value['price']}.to_h