原です。

>さくです。

>class Array
>   def sort_by
>     collect { |e| [ yield(e), e ] }.sort.collect{ |e| e[1] }
>   end
>end
>
>puts ARGF.readlines.sort_by { |line| line.split(':')[2] }

これより遅い例ですが、スタンダードを一応あげておきます。

puts readlines.sort{|line, line0|
   line.split(':')[2] <=> line0.split(':')[2]
}

最近ひそかにブームなのが

def (Split = {}).[](x)
   super(x) || self[x] = x.split(':')
end
puts readlines.sort{|line, line0|  Split[line][2] <=> Split[line0][2]}

ですが、分かり難い点ではお勧めできません。(^^;