Question

Quelle est la meilleure façon de trier un Enumerable par ordre décroissant?

Je fais @array.sort.reverse ou @array.sort_by{|song| song.title }.reverse

Je suppose que je pouvais faire quelque chose comme @array.sort{|a, b| b.title <=> a.title}, mais je trouve cela difficile à lire et bavard.

Était-ce utile?

La solution

La performance de Array.reverse est pas très mauvais. Ce que vous coûte en utilisant @array.sort.reverse est une duplication de tableau supplémentaire ainsi que l'inverse (n / 2 commutateurs d'éléments). Alors oui, je pense que cela devrait être acceptable si vous pensez qu'il est lu plus claire.

Voir son la source pour plus de détails. Et, je pense aussi à l'aide @array.sort.reverse ne fournit « légèrement » une meilleure lisibilité (mais il est pas très difficile à lire aucune façon).

Autres conseils

Je ne suis pas sûr que cela fonctionne mieux que soi-disant « pièce évidente de Wayne Conrad d'ordure « , mais vous pouvez définir Enumerable#sort_by_descending comme

Enumerable.class_eval do
  def sort_by_descending(&block)
    sort { |a, b| block.bind(b).call <=> block.bind(a).call }
  end
end

Ensuite, appelez comme suit:

@songs.sort_by_descending(&:title)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top