按嵌套值排序哈希值

ika*_*nyu 1 ruby hash

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

{
  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
  }
} 
Run Code Online (Sandbox Code Playgroud)

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

Gag*_*ami 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
        }
    } 
Run Code Online (Sandbox Code Playgroud)

更新:

如果您有像字符串一样的价格,"15,000"你可以删除逗号seprator并将其转换为整数,如:

> "15,000"
> "15,000".tr(',', '').to_i
#=> 15000
Run Code Online (Sandbox Code Playgroud)

所以代码就像:

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