ソートのときに比較関数が何らかの計算を含む場合、計算に重複が出て処理性能が落ちる。これを避けるために、あらかじめ計算結果と一緒に連想配列のような入れ物を別途用意して並べ直すのが一般的なようだ。1994年にPerlハッカーのランダル・シュワルツがPerlイディオムとして書いたことから広く「シュワルツ変換」と呼ばれている、とWikipediaにある。Lispではもともとasoccを使ったりして同様のことをやっていたので、Perlのイディオムに付いた名前が一般化したということらしい。 ちょっと検索すると、いろんな言語でのシュワルツ変換が出てくるけど、Ruby では何と組み込みだった。Enumerable#sortには、以下の解説が。 As of Ruby 1.8, the method Enumerable#sort_by implements a built-in Schwartzian Tr