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.

Foi útil?

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)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top