我的数据是
enumerable = [{rank:1}, {rank: nil}, {rank: 3}, {rank: 2}]
我想要
sorted = [{rank:1}, {rank: 2}, {rank: 3}, {rank: nil}]
我尝试过:
sort_by{|x| x.rank.to_i}
,但nil
放在第一位。它必须非常高效,因为我必须进行多次计算。
答案 0 :(得分:4)
让我们根据两个条件进行排序:
这样
enumerable.sort_by { |item| [item[:rank] ? 0 : 1, item[:rank]] }
答案 1 :(得分:2)
enumerable.sort_by { |h| h[:rank] || Float::INFINITY }
#=> [{:rank=>1}, {:rank=>2}, {:rank=>3}, {:rank=>nil}]