From: Yukihiro Matsumoto <matz@...> Date: 2010-11-27T23:19:16+09:00 Subject: [ruby-dev:42643] Re: Enumerable#categorize まつもと ゆきひろです In message "Re: [ruby-dev:42638] Enumerable#categorize" on Sat, 27 Nov 2010 18:45:03 +0900, Tanaka Akira <akr@fsij.org> writes: |enumerable から hash を生成するメソッドとして |Enumerable#categorize を追加するのはどうでしょうか。 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 よりも汎用的ではないかと思います。 いや、 categorize は不要だとかまでは主張しませんが、こっちが 先に欲しいです。 |* ネストしたハッシュの生成 |* ハッシュの値の後処理 |* :seed, :op, :update オプション |* 複数の値を取り出す 私の提案ではこの辺は対応できないので、 categorize の意味はあ るとは思います。 で、このメソッドの適切な名前はなんでしょうね。make_mapとか考 えたのですが、美しくない。Lispとかに似たような関数なかったっ けな。 まつもと ゆきひろ /:|)