得到一個Ruby陣列等:排序散列Ruby中的陣列(由存在任選鍵+值分選)
[ { "lat" => 123, "lon" => 456 },
{ "lat" => 789, "lon" => 102, "col" => "red" },
{ "lat" => 442, "lon" => 342 } ]
我想對它進行排序,使得任何散列與col
作爲密鑰意願被推到陣列的頂部或底部。
找不到正確的sort_by
語法/語義。
得到一個Ruby陣列等:排序散列Ruby中的陣列(由存在任選鍵+值分選)
[ { "lat" => 123, "lon" => 456 },
{ "lat" => 789, "lon" => 102, "col" => "red" },
{ "lat" => 442, "lon" => 342 } ]
我想對它進行排序,使得任何散列與col
作爲密鑰意願被推到陣列的頂部或底部。
找不到正確的sort_by
語法/語義。
a = [ { "lat" => 123, "lon" => 456 },
{ "lat" => 789, "lon" => 102, "col" => "red" },
{ "lat" => 442, "lon" => 342 } ]
如果你想要把它們放在上面,然後
a.partition{|h| h.key?("col")}.flatten
如果你想把它們放在底部,然後由鐵皮人建議,
a.partition{|h| h.key?("col").!}.flatten
謝謝@sawa :) – 2013-04-22 06:15:52
把它們放在底部,試試'!h.key?('col')'並移除'reverse'。他們應該完成同樣的事情,但是要減少工作。 – 2013-04-22 13:43:21
是的,那樣更好。 – sawa 2013-04-22 14:01:05
我喜歡的功能更多的方法:
require 'pp'
a = [ {:foo => "aa","col" => "bar"}, { "lat" => 123, "lon" => 456 },
{ "lat" => 789, "lon" => 102, "col" => "red" },
{ "lat" => 442, "lon" => 342 } ]
arr = a.group_by{|h| h.key?("col")}
pp arr[false] + arr[true] # on the bottom
輸出:
[{"lat"=>123, "lon"=>456},
{"lat"=>442, "lon"=>342},
{:foo=>"aa", "col"=>"bar"},
{"lat"=>789, "lon"=>102, "col"=>"red"}]
pp arr[true] + arr[false] #on the top
輸出:
[{:foo=>"aa", "col"=>"bar"},
{"lat"=>789, "lon"=>102, "col"=>"red"},
{"lat"=>123, "lon"=>456},
{"lat"=>442, "lon"=>342}]
感謝@RubyLovely – 2013-04-22 20:16:11
頂部或底部;哪一個? – sawa 2013-04-22 06:04:10
你寫了什麼代碼? – 2013-04-22 13:38:14