From: Tanaka Akira Date: 2010-11-27T23:35:51+09:00 Subject: [ruby-dev:42644] Re: Enumerable#categorize 2010年11月27日23:19 Yukihiro Matsumoto : > Enumerableからhashを生成するメソッドはちょうど昨日欲しいと思っ > たばかりなので、そういうメソッドの必要性は理解します。が、 > categorize よりも先に「要素をブロックに渡して、そのブロックの > 生成値によってハッシュを作るメソッド」が欲しいです。 まぁ、ハッシュを生成するメソッドは配列を生成するメソッドにくらべて ずいぶんと少ないですよね。 > | ary = [ > | ["matz", "Yukihiro Matsumoto"], > | ["nobu", "Nobuyoshi Nakada"], > | ["akr", "Tanaka Akira"], > | ["usa", "Usaku NAKAMURA"], > | ["naruse", "NARUSE, Yui"], > | ["ko1", "SASADA Koichi"] > | ] > > h = ary.xxx{|e| [e[1],e[0]]} > #=> {"Yukihiro Matsumoto"=>["matz"], > "Nobuyoshi Nakada"=>["nobu"], > "Tanaka Akira"=>["akr"], > "Usaku NAKAMURA"=>["usa"], > "NARUSE, Yui"=>["naruse"], > "SASADA Koichi"=>["ko1"]} > > です。まだxxxに該当する適切な名前を思いついていませんが。これ > は(デフォルトでは)Enumerableの要素が配列であることを仮定して > いる categorize よりも汎用的ではないかと思います。 確認したいのですが、ハッシュの値は配列になるのですね? 配列でなく、最後の値なら、Hash[ary.map {|e| [e[1], e[0]] }] と等価だと 思うので。 > で、このメソッドの適切な名前はなんでしょうね。make_mapとか考 > えたのですが、美しくない。Lispとかに似たような関数なかったっ > けな。 hashmap というのが一番に思い浮かびましたが、 ハッシュの値が配列とすると違うなぁ。 -- [田中 哲][たなか あきら][Tanaka Akira]