From: Urabe Shyouhei Date: 2010-11-27T20:05:01+09:00 Subject: [ruby-dev:42641] Re: Enumerable#categorize (2010/11/27 19:51), Tanaka Akira wrote: > 2010年11月27日19:37 Urabe Shyouhei : >>> 幸いにして第一要素から第二要素へのハッシュは Hash[ary] で作れるようになったので、 >>> 逆の第二要素から第一要素へのハッシュについて考えましょう。 >>> (同姓同名を考慮して、ハッシュの値は第一要素の配列としましょう) >>> >>> これを得るには現在、残念な事に、自分でループを書く必要があります。 >> >> この状況を改善するという選択肢はありませんか。つまりHash[ary].invertがもう少し >> 賢くなればいいんですよね? > > いや、もっと一般的な事を考えています。 > CSV から読み込む、という状況に触れたのもそうなのですが、 > 一般にフィールド (カラム) はふたつとは限りません。 > また、必ずユニークなキーがあるとも限りません。 > > それもあって、最初にデータがハッシュとして存在する、 > という仮定はしたくありません。 ハッシュではないものをHashで扱おうという発想がそもそも破綻してませんか >>> 引数の 1, 0 が何を意味するかというと、enumerable の要素から >>> ハッシュのキー及び値を取り出す指定です。 >>> 具体的には ary の各要素に対し、[] メソッドを呼び出し、 >>> その引数に引き渡してキー/値を得ます。 >>> つまり、["matz", "Yukihiro Matsumoto"][1] として "Yukihiro Matsumoto" というキーを得て、 >>> ["matz", "Yukihiro Matsumoto"][0] として "matz" という値を得るわけです。 >> >> 分かりにくすぎると思います。 > > 0, 1 というインデックスがわかりにくい、という意図でしょうか? いいえ、一番目の引数がkeyで二番目の引数がvalueであるというのが字面から分かりづ らいと思います。 たとえばary.categorize(0 => 1)とか書いてあれば私にとっては多少は分かりやすくな ります。あるいはary.categorize(key: 0, value: 1)とか。 > >> これが存在すること自体には特に反対しませんが、ちょっと抽象的すぎて逆に使いづら >> いと感じます。最終的にこのアルゴリズムに落ちたとしても、ユーザーにはもう少し使 >> いやすいAPIを提供すべきでしょう。たとえば数を数える専用のメソッドを作るとか。 > > ひとつひとつ進めていこうかと思っていて、 > 値を配列にする必要がない場合と、 > 数を数えるものについては、 > また後で (気が向いたときに) やろうかと思っていました。 これらについても反対ではありません。