From: "Toshiyuki Ogura" <oguradio / gmail.com> Subject: [ruby-list:43494] ブロックとともに呼び出されたsortについて Date: Tue, 15 May 2007 11:29:40 +0900 るびきちです。 > hash = {"x" => 1, "y" => 0, "z" => 2} > p hash.sort{|a,b| > a[1] <=> b[1] > } hashを配列に変換し、第1要素(0から数えて)を基準に並べ変えています。 [key, value]の配列なのでhashの値が基準です。 hash = {"x" => 1, "y" => 0, "z" => 2} # Hashをsortすると配列化される。 hash.sort{|a,b| a[1] <=> b[1]} # => [["y", 0], ["x", 1], ["z", 2]] # 配列化したものは順不同になる。 ary = hash.to_a # => [["x", 1], ["y", 0], ["z", 2]] ary.sort{|a,b| a[1] <=> b[1]} # => [["y", 0], ["x", 1], ["z", 2]] # sort_byが使える。 ary.sort_by{|x| x[1] } # => [["y", 0], ["x", 1], ["z", 2]] hash.sort_by{|x| x[1] } # => [["y", 0], ["x", 1], ["z", 2]] sort_byが有用です。ブロックはそれぞれの要素を取ります。 この場合「第1要素」が基準なので x[1] と『1回だけ』書けばいいのです。 -- rubikitch http://www.rubyist.net/~rubikitch/