Сортировать перечислимые с `nil` как последний - PullRequest
0 голосов
/ 18 марта 2019

Мои данные

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 s ставится на первое место.Это должно быть очень эффективно, потому что мне приходится вычислять много раз.

Ответы [ 2 ]

4 голосов
/ 18 марта 2019

Давайте рассортируем по двум критериям:

  1. рейтинг ноль / не ноль
  2. значение ранга

Таким образом,

enumerable.sort_by { |item| [item[:rank] ? 0 : 1, item[:rank]] }
2 голосов
/ 18 марта 2019
enumerable.sort_by { |h| h[:rank] || Float::INFINITY }
  #=> [{:rank=>1}, {:rank=>2}, {:rank=>3}, {:rank=>nil}] 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...