2016-12-14 3 views
-4

Как избежать сравнения с nil? Я хочу, чтобы значение ноль, чтобы быть последним элементом при сортировке:Как сделать sort_by значение, когда оно равно

hash.sort_by{|k,v| [v.present? ? v : 99999999]} 
+0

Являются ли эти значения точки целочисленные или плавучие? – Bathsheba

+0

Пожалуйста, добавьте фактический вход и желаемый выход. –

+2

'hash.sort_by {| k, v | v || Float :: INFINITY} .to_h' –

ответ

2

Ваш вопрос не ясен, но, как я понимаю, это должно помочь вам.

#> hash 
#=> {:b=>nil, :c=>4, :v=>7} 

hash.sort_by { |_,value| value || Float::INFINITY }.to_h 
#=> {:c=>4, :v=>7, :b=>nil} 
2
[2, 5, 1, nil, 7, 3, nil, nil, 4, 6].sort_by { |i| [i ? 0 : 1, i] } 
#=> [1, 2, 3, 4, 5, 6, 7, nil, nil, nil] 
+2

Приятно, но вы должны вкратце объяснить, что происходит. – Stefan

0
hash.sort_by{|k,v| [v ? v : 99999999]}.to_h 
+1

Но что, если хэш содержит число выше 99,999,999? Он появится после значений «nil». – Stefan

Смежные вопросы