2005年02月15日

集合

  
C#には、言語で集合という概念をサポートしていません。というかほとんどの言語では、集合をサポートしていないのだと思いますが、集合の概念を簡単にコードにできないので、面倒だなーと感じることがあります。
数年前の僕だったら、ビット演算を使っっていると思いますが、どうもオブジェクト指向ぽくありません。C#では[FlagsAttribute] 属性と enumを組み合わせることで、それらしいことができるので、たいていは、[FlagsAttribute] を使っていますが、どうも、すっきりとしないときもあります。
やはり、集合クラスを自作したほうが良いのかな。
なんて、悩んでいる間にコードを書けばいいのですが...


この記事へのコメント
私も集合を扱うクラスが欲しいと思っていました。実装されたらぜひ公開してください :)

ちなみに、言語レベルで集合をサポートしてる訳ではありませんが、Objective Caml, Haskell にはスタンダードライブラリに set と呼ばれる集合を扱うモジュールがあります。

典型的な parameterized polymorphism の適用例です。C#には詳しくないのですが、集合クラスの実装にご参考になれば。
Posted by osiire at 2005年02月27日 23:10
コメントありがとうございます。Objective Caml, Haskell については、初耳でした。Webを検索してみましたが、setモジュールについての記述を見つけられませんでした。どんな仕様なのかがわかりませんが、JavaのHashSetクラスを参考に、C# の HashSetを書いてみました。
C#は、すべてをObject として扱えるので、使いやすいかは別として汎用的に使えると思います。
C# 2.0になれば、テンプレート機能が付くので、また違った実装になるかと知れませんね。
昨日の記事にソースを掲載しています。
Posted by gushwell at 2005年03月02日 13:40
 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/14372637