私は通常次のようなことをします
array.sort{|a,b| a.something <=> b.something}
これをどのように乾かす必要がありますか?
sort_byを使用します
array.sort_by{|e| e.something}
また
sort_lambda = lambda{|e| e.something}
array.sort_by(&sort_lambda)
後者を使用すると、sort_lambdaを他のsort_byステートメントで再利用できます
Railsでは、あるいはActiveSupportで、またはRuby 1.9(おそらく1.8.7、わからない)では、新しいショートカットのホットネスを使用できます。
array.sort_by(&:something)
sort_by
おそらく高価な(そしておそらく有益な:ソートキーの複雑さに依存する)副作用があることに注意してください:新しいキーでソートできるように、各アイテムの一時的なキーと値のペアを生成して保存します。詳細については、ドキュメントの説明を参照してください。
Eimantasの両方の提案に+1しますが、先頭の句読点や/ a / anを無視して、大文字と小文字を区別せずに並べ替えるアルバムのように、常にこのように並べ替えるカスタムクラスがある場合によく発生します。そのためには、ソート値を1回計算してから、それに応じて<=>を再定義する方が効率的です。例えば:
class Album
def sort_value
@sv ||= @name.downcase.sub(/^\W*(the|an|a) /,"")
end
def <=>(other)
sort_value <=> (other.sort_value rescue other)
end
end
aとbのクラスにComparableを含めて、sortを呼び出すことを検討しましたか?