From: Tanaka Akira Date: 2010-11-28T00:12:42+09:00 Subject: [ruby-dev:42648] Re: Enumerable#categorize 2010年11月27日23:19 Yukihiro Matsumoto : > |* ネストしたハッシュの生成 > |* ハッシュの値の後処理 > |* :seed, :op, :update オプション > |* 複数の値を取り出す > > 私の提案ではこの辺は対応できないので、 categorize の意味はあ > るとは思います。 ブロックが返した配列の長さが 3以上ならネストしたハッシュを生成するという やりかたはあるかもしれません。 ブロックが返す配列の長さが変化したりするとエラーが発生してしまうことも あるだろう、という点はありますが。 複数の値を取り出すのは、ブロックが返す配列の値部分を適当に作ればいいので、 これは問題なく実現できると思います。 残りのふたつはまず同じキーが複数回生成されたときにどうするか、 という点があって、まつもとさんのは重ね書きしていって最後のが残る、 というのが想定のようです。 一応、:seed, :op, :update オプションを導入してそこを カスタマイズできるようにする、という手もなくはありません。 ただ、ブロックが動いた後に :op や :update が動くという実行順序になるので 左から右に動いていくという感じになりませんが。 あと、平均を求めるときなどには、最後に独立した後処理 (平均の場合には割り算) が必要で、これはまぁ、どうしてもいれるならまた別の オプションですかねぇ。 まぁ、オプションはやりすぎだとすれば、ふたつはどうにかなる、 というあたりでしょうか。 -- [田中 哲][たなか あきら][Tanaka Akira]