我需要按距离对此哈希进行排序。我还需要将所有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似乎是我需要做的,但我没有提出解决方案。
答案 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" }
]
}
根据距离进行排序
hash["zip_codes"].sort_by { |k| k["distance"] }
获取所有邮政编码
hash["zip_codes"].map{|k| k["zip_code"]}