これつぐです。 いっそのこと Array#sort の仕様をかえるというのはどうでしょう。 たとえばこんなふうに。 sort sort! sort {|e|...} sort! {|e|...} 配列の内容をソートします.ブロックを与えて呼び出された時には 各要素をブロックで評価した結果で比較します.ブロックがない時には <=>演算子を使って比較します.sortはソートされた新しい配列を返し, sort!は配列の内容をその場でソートします. CはわからないのでRubyレベルで書くとこんな感じ……? class Array alias _sort! sort! alias _sort sort def sort! if iterator? filter{|e| [yield(e), e]}._sort!.filter{|e| e.pop} else _sort! end end def sort if iterator? dup.sort!{|e| yield(e)} else _sort end end end こうすれば ary.sort{|e| e.downcase} ary.sort{|e| [e.to_i, e.to_s, e.to_f]} ary.sort{|e| [e['name'], e['age']]} という風に書けます。 仕様変更はさすがにおおげさなので SchwartzianTransform.rbを添付とか?(←長すぎ)