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)
这样做的工作:
array.sort{|a,b| (a[:accepts] == b[:accepts]) ? ((a[:id] < b[:id]) ? -1 : 1) : (a[:accepts] ? -1 : 1)}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4430 次 |
| 最近记录: |