Trie un dénombrable par ordre décroissant
-
22-09-2019 - |
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.
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)