Что лучший способ состоит в том, чтобы отсортировать 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
действительно обеспечивает "немного" лучшую читабельность (но это не очень сложно прочитать в любом случае).
Я не уверен, работает ли это лучше, чем Уэйн Конрад Само описанный «очевидный кусок нежелания», но вы можете определить 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)