这个问题已经有了答案:
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%"
}
]