最后对带有nil的可枚举进行排序

时间:2019-03-17 23:37:33

标签: ruby-on-rails ruby sorting

我的数据是

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放在第一位。它必须非常高效,因为我必须进行多次计算。

2 个答案:

答案 0 :(得分:4)

让我们根据两个条件进行排序:

  1. 排名无/不是零
  2. 排名值

这样

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}]