您的位置:首页 > 编程语言 > Ruby

Sorting an array of hash in Ruby

2014-06-23 12:15 423 查看
I have one array of hashes as following:

ar = [{"k1"=>"v1", "k2"=>"75.1%"}, {"k1"=>"v2", "k2"=>"-NA-"}, {"k1"=>"v3", "k2"=>"5.1%"}]
ar.sort_by{|h|(k2 = h["k2"]) == "-NA-"? -Float::INFINITY : -k2.to_f}
#=>[{"k1"=>"v2", "k2"=>"-NA-"}, {"k1"=>"v1", "k2"=>"75.1%"}, {"k1"=>"v3", "k2"=>"5.1%"}]
a = [
{"k1"=>"v1", "k2"=>"75.1%"},
{"k1"=>"v2", "k2"=>"-NA-"},
{"k1"=>"v3", "k2"=>"5.1%"}
]

I want to sort this array of hashes based on the value of key
"k2"
. I want to sort it in the decreasing order with
"-NA-"
coming at top always.
I want sorted array like this:
[{"k1"=>"v2", "k2"=>"-NA-"}, {"k1"=>"v1", "k2"=>"75.1%"}, {"k1"=>"v3", "k2"=>"5.1%"}]

na, rest = a.partition{|h| h["k2"] == "-NA-"}
na + rest.sort_by{|h| h["k2"].to_f}.reverse
[{"k1"=>"v1", "k2"=>"75.1%"}, {"k1"=>"v2", "k2"=>"-NA-"}, {"k1"=>"v3", "k2"=>"5.1%"}]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: