这个问题已经有了答案:
How do I sort an array of hashes by a value in the hash?
4答
我有一个散列数组,如下所示:

[{"k1"=>"v1", "k2"=>"75.1%"}, {"k1"=>"v2", "k2"=>"-NA-"}, {"k1"=>"v3", "k2"=>"5.1%"}]

我想根据key"k2"的值对这个散列数组进行排序。我想按降序排序,"-NA-"总是排在第一位。
我想要这样的排序数组:
[{"k1"=>"v2", "k2"=>"-NA-"}, {"k1"=>"v1", "k2"=>"75.1%"}, {"k1"=>"v3", "k2"=>"5.1%"}]

我尝试了hash.sort_by method,但得到的结果不正确。用红宝石怎么做?

最佳答案

a = [
  {"k1"=>"v1", "k2"=>"75.1%"},
  {"k1"=>"v2", "k2"=>"-NA-"},
  {"k1"=>"v3", "k2"=>"5.1%"}
]

na, rest = a.partition{|h| h["k2"] == "-NA-"}
na + rest.sort_by{|h| h["k2"].to_f}.reverse
# =>
[
  {
    "k1" => "v2",
    "k2" => "-NA-"
  },
  {
    "k1" => "v1",
    "k2" => "75.1%"
  },
  {
    "k1" => "v3",
    "k2" => "5.1%"
  }
]

10-07 14:00
查看更多