basyura's blog

あしたになったらほんきだす。

Hash#sort

ちょっと動きがキモイ。

map = {"a" => "1" , "b" => "2" , "c" => "3"}
p map.sort
#=> [["a", 1], ["b", 2], ["c", 3]]

ソートすると、キーと値の配列の配列をソートした結果が出力される。
Hash は Enumerable をインクルードしているので、each を実装すれば勝手に sort も付いてくる。each を呼び出すと

map.each{|k,v|
 puts k,v
}
#=>a
#=>1
#=>b
#=>2
#=>c
#=>3

引数が(?)一つだと

map.each{|v|
  p v
}
#=>["a", 1]
#=>["b", 2]
#=>["c", 3]

配列で入ってくる。sort で呼び出した後に配列の配列になってるのは何となく分かる。
each の引数(?) が一つの場合は配列で、複数定義したらそれぞれに入るのは言語の決まりで、sort で配列の一つ目を使うのは Enumeable がやってるのかな??