Сортировка перечисляемого в порядке убывания
-
22-09-2019 - |
Вопрос
Каков наилучший способ отсортировать Enumerable
в порядке убывания?
Я делал @array.sort.reverse
или @array.sort_by{|song| song.title }.reverse
Я полагаю, я мог бы сделать что-то вроде @array.sort{|a, b| b.title <=> a.title}
, но я нахожу это трудным для чтения и подробным.
Решение
Производительность Array.reverse
не является очень плохой.Во что вам обходится использование @array.sort.reverse
это дополнительное дублирование массива плюс обратное (переключатели n / 2 элементов).Так что да, я думаю, это должно быть приемлемо, если вы считаете, что это читается понятнее.
Увидеть его Источник для получения подробной информации.А также, я думаю, используя @array.sort.reverse
обеспечивает "немного" лучшую читаемость (но в любом случае читать не очень сложно).
Другие советы
Я не уверен, работает ли это лучше, чем Уэйн Конрадэто самоописанный "очевидный кусок хлама", но вы могли бы определить Enumerable#sort_by_descending
как
Enumerable.class_eval do
def sort_by_descending(&block)
sort { |a, b| block.bind(b).call <=> block.bind(a).call }
end
end
Затем вызовите его следующим образом:
@songs.sort_by_descending(&:title)