如何在Rails中对此哈希进行排序

时间:2018-01-12 19:48:33

标签: ruby sorting hash

我需要按距离对此哈希进行排序。我还需要将所有zip_codes从哈希中拉出来。

{ "zip_codes" =>
  [
    { "zip_code"=>"80504", "distance"=>3.874, "city"=>"Longmont", "state"=>"CO" },
    { "zip_code"=>"80501", "distance"=>0, "city"=>"Longmont", "state"=>"CO" },
    { "zip_code"=>"80502", "distance"=>0.508, "city"=>"Longmont", "state"=>"CO" },
    { "zip_code"=>"80533", "distance"=>3.661, "city"=>"Hygiene", "state"=>"CO" }
  ]
}

对于第一个问题,sort_by似乎是我需要做的,但我没有提出解决方案。

2 个答案:

答案 0 :(得分:2)

如你所说,sort_by是要走的路。您只需要在实际排序之前访问该数组。

假设hash是一个名为h的变量:

h["zip_codes"].sort_by { |item| item['distance'] }

# the result:

[
  {"zip_code"=>"80501", "distance"=>0, "city"=>"Longmont", "state"=>"CO"},
  {"zip_code"=>"80502", "distance"=>0.508, "city"=>"Longmont", "state"=>"CO"},
  {"zip_code"=>"80533", "distance"=>3.661, "city"=>"Hygiene", "state"=>"CO"},
  {"zip_code"=>"80504", "distance"=>3.874, "city"=>"Longmont", "state"=>"CO"}
]

如果您只想获取邮政编码,可以map结果,如下所示:

h["zip_codes"].sort_by { |item| item['distance'] }.map { |item| item['zip_code'] }

答案 1 :(得分:1)

您可以使用sort_by进行排序,并.map获取所有zip codes

 hash = { "zip_codes" =>
          [
            { "zip_code"=>"80504", "distance"=>3.874, "city"=>"Longmont", "state"=>"CO" },
            { "zip_code"=>"80501", "distance"=>0, "city"=>"Longmont", "state"=>"CO" },
            { "zip_code"=>"80502", "distance"=>0.508, "city"=>"Longmont", "state"=>"CO" },
            { "zip_code"=>"80533", "distance"=>3.661, "city"=>"Hygiene", "state"=>"CO" }
          ]
        }
  1. 根据距离进行排序

    hash["zip_codes"].sort_by { |k| k["distance"] }

  2. 获取所有邮政编码

    hash["zip_codes"].map{|k| k["zip_code"]}