From: gotoken@... (GOTO Kentaro) Date: 2000-02-21T20:41:42+09:00 Subject: [ruby-list:20894] Re: collect + find_all ==> select ? ごとけんです In message "[ruby-list:20888] Re: collect + find_all ==> select ?" on 00/02/21, Yukihiro Matsumoto writes: >|> |★ "集合"をあつかうクラスはないのでしょうか? ぼくも配列を使っています。 集合そのものではなく BitArray というのを作ろうというはなしは ありますよね。 僕も集合を何度も定義して捨てているのですが、その理由は補集合 が取れないといまいち不便だからです。有限集合で良いなら、 BitArray を使った実装がよいと思います。 >ちょっと考えると任意の要素の集合として考えるとき、要素につい >ての前提をなにも使えなければ、全ての組合せで比較するしかない >ように感じられますが。また、比較の基準はなににしましょう。 >==? ===? equal? > >要素がComparableであればあらかじめsortするという手が使えます >けどねえ。 同値性の判定方法は指定できる方が便利でしょう。また、uniq か けておかないといけないし、色々考えるとやっぱり BitArray とい うのが自然に思えています。 >|話題ちょっと変わりますが,もう一度定義をみますと, >|Enumerableって直接Arrayを返すのですね。 >| >|Enumerable の定義として, >| >|・入力はコンテナのeach >|・出力はコンテナのpush >|・(新しい空のコンテナを作るメソッド) >| >|のようにして Enumerable を Array から独立させる >|とかいうのはなかったでしょうか? > >思い付きませんでした。;-) > >全てのコンテナがpushを持つわけではないということと、入力のコ >ンテナと出力のコンテナは独立なものなわけですが、別々に指定す >るのは結構面倒な気がするのと、RubyはArrayが十分強力なので出 >力はArrayで良いじゃんというのはありますね。 ですよね。一番の問題は、木のような push が一意でない対象も Enumerable であると感じられる点です。 ぼくは ExtEnumerable という collect! をもったmixinを定義して 使っていましたが捨てました。 -- gotoken