Сортировка перечисляемого в порядке убывания

StackOverflow https://stackoverflow.com/questions/2142527

  •  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)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top