Ruby按布尔和数字排序

Nic*_*ick 6 ruby arrays sorting boolean

我正在使用Ruby 1.8.7.我有以下哈希数组.我需要先按布尔值排序,但这些结果必须按原始顺序排序.我基本上需要将所有真正的哈希值移到数组的顶部,但保持原始顺序.

任何帮助,将不胜感激!

array = [{:id => 1, :accepts => false}, 
         {:id => 2, :accepts => false}, 
         {:id => 3, :accepts => true}, 
         {:id => 4, :accepts => false}, 
         {:id => 5, :accepts => true}]

sorted = array.sort do |x, y|
  if x[:accepts] == y[:accepts]
    0
  elsif x[:accepts] == true
    -1
  elsif x[:accepts] == false
    1
  end
end
Run Code Online (Sandbox Code Playgroud)

我得到的这种产量:

5 - 真
3 - 真
2 - 假
4 - 假
1 - 假

我需要它来产生:

3 - 真
5 - 真
1 - 假
2 - 假
4 - 假

gle*_*ald 14

使用sort_by这些东西,不是sort!

array.sort_by {|h| [h[:accepts] ? 0 : 1,h[:id]]}
Run Code Online (Sandbox Code Playgroud)


Phi*_*lip 8

这样做的工作:

array.sort{|a,b| (a[:accepts] == b[:accepts]) ? ((a[:id] < b[:id]) ? -1 : 1) : (a[:accepts] ? -1 : 1)}
Run Code Online (Sandbox Code Playgroud)