Hash.maxがそのままだと、キーの最大値を返す。
rubyのHashはmax()でキーの最大値を求めてくるので困ります.
そこで値から最大値を求めるようにします.
h.max { |a, b| a[1] <=> b[1] }
でValueの最大値が返ってくる.便利ね.
最小値も同じ
h.min { |a, b| a[1] <=> b[1] }
デフォルト動作では
h.max { |a, b| a <=> b }
のように動いているっぽい
Array/Enumerable ではデフォルトの比較で問題ない。しかしHashだと意図したとおり動かない.Hashではが a,b が配列になる。なのでHashでmaxが誤作動する
h.max { |a, b| a <=> b }# Hashの場合 a=>[key,value], b=>[key,value]
になっている。Ruby1.8だけの問題なのですかね。本家で修正してほしいと思うくらい紛らわしい。まぁユーザー側で組み込みクラスの動作変えられるから問題ないんですね。Ruby楽しいね.
組み込みのHash動作を変えてみる
class Hash def max(&block) #よくわからん end end