Classifique um enumerável em ordem decrescente
-
22-09-2019 - |
Pergunta
Qual é a melhor maneira de classificar um Enumerable
por ordem decrescente?
Eu estive fazendo @array.sort.reverse
ou @array.sort_by{|song| song.title }.reverse
Suponho que poderia fazer algo como @array.sort{|a, b| b.title <=> a.title}
, mas acho isso difícil de ler e detalhado.
Solução
O desempenho de Array.reverse
não é muito ruim.Quanto custa usar @array.sort.reverse
é uma duplicação extra da matriz mais o reverso (n/2 opções de elemento).Então, sim, acho que isso deveria ser aceitável se você achar que a leitura é mais clara.
Veja seu fonte para detalhes.E também, acho que usar @array.sort.reverse
fornece legibilidade 'ligeiramente' melhor (mas não é muito difícil de ler).
Outras dicas
Não tenho certeza se isso funciona melhor do que Wayne ConradA auto-descrita "peça óbvia de lixo", mas você pode definir Enumerable#sort_by_descending
Como
Enumerable.class_eval do
def sort_by_descending(&block)
sort { |a, b| block.bind(b).call <=> block.bind(a).call }
end
end
Então chame o seguinte:
@songs.sort_by_descending(&:title)