まつもと ゆきひろです
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とかに似たような関数なかったっ
けな。
まつもと ゆきひろ /:|)