7

Enumerable降順で並べ替える最良の方法は何ですか?

私はやってきた@array.sort.reverse@array.sort_by{|song| song.title }.reverse

のようなことができると思いますが@array.sort{|a, b| b.title <=> a.title}、これは読みにくく、冗長です。

4

2 に答える 2

5

の性能Array.reverseそれほど悪くありません。使用することでコストがかかる@array.sort.reverseのは、余分な配列の複製とその逆 (n/2 要素の切り替え) です。そうです、あなたがそれがより明確に読めると思うなら、それは受け入れられるべきだと思います.

詳細については、そのソースを参照してください。また、使用すると@array.sort.reverse読みやすさが「わずかに」向上すると思います(ただし、読むのはそれほど難しくありません)。

于 2010-01-27T00:01:12.890 に答える
3

これがWayne Conradの自称「明らかながらくた」よりうまく機能するかどうかはわかりませんが、次のEnumerable#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)
于 2010-01-27T13:10:56.897 に答える