マージソートの sort_by
マージソートシリーズ最終回。
module Enumerable def msort_by map{|i| MSORT.new(yield(i), i) }.msort {|a,b| a.key <=> b.key }. map{|i| i.val} end private MSORT = Struct.new(:key, :val) end ["3a", "1b", "4c", "1d", "5e", "9f"].msort_by{|v| v.to_i} # => ["1b", "1d", "3a", "4c", "5e", "9f"]
これでブロックなし、ブロック付き、sort_by の 3 種類が揃って Ruby らしくなった。