在 Ruby 中对哈希数组进行排序(按存在的可选键+值排序)

Dan*_*May 2 ruby arrays sorting hash

得到一个 Ruby 数组,如:

[  { "lat" => 123, "lon" => 456 },
   { "lat" => 789, "lon" => 102, "col" => "red" },
   { "lat" => 442, "lon" => 342 } ]
Run Code Online (Sandbox Code Playgroud)

我想对它进行排序,以便将任何col作为键的散列推到数组的顶部或底部。

无法弄清楚正确的sort_by语法/语义。

saw*_*awa 5

a = [  { "lat" => 123, "lon" => 456 },
   { "lat" => 789, "lon" => 102, "col" => "red" },
   { "lat" => 442, "lon" => 342 } ]
Run Code Online (Sandbox Code Playgroud)

如果你想把它们放在最上面,那么

a.partition{|h| h.key?("col")}.flatten
Run Code Online (Sandbox Code Playgroud)

如果你想把它们放在底部,那么按照铁皮人的建议,

a.partition{|h| h.key?("col").!}.flatten
Run Code Online (Sandbox Code Playgroud)

  • 要将它们放在底部,请尝试 `!h.key?('col')` 并删除 `reverse`。他们应该完成同样的事情,但减少工作量。 (2认同)