古い質問
私の理解では、C# には何らかの意味HashSet
とset
型があります。私は何を理解していHashSet
ます。しかし、なぜset
別の単語なのですか?すべてのセットが ではないのはなぜHashSet<Object>
ですか?
新しい質問
Set
型と同様に、C# にジェネリック型がないのはなぜDictionary
ですか? 私としては、検索・追加・削除の性能が標準的なセットが欲しいところです。それがハッシュで実現されているか、他の何かで実現されているかはあまり気にしません。では、実際にHashSet
はこのバージョンの C# では として実装されるが、将来のバージョンでは多少異なるセット クラスを作成してみませんか?
または、少なくともインターフェースではないのはなぜISet
ですか?
答え
以下に回答してくれたすべての人に感謝しICollection
ますISet
。ただし、私の観点からは、セットが列挙可能である必要はありませんが、ICollection
実装IEnumerable
します --- 例: 1 と 2 の間の実数のセット (さらに、セットは動的に生成できます)。「普通のプログラマー」が無数のセットを必要とすることはめったにないので、これはマイナーな暴言であることに同意します。
わかりました、私はそれを理解したと思います。HashSet
は絶対に呼び出されることを意図していましSet
たが、この単語Set
はある意味で予約されています。より具体的には、.NET アーキテクチャの作成者は、さまざまな言語に対して一貫性のある (原文のまま!) クラスのセットを持ちたいと考えていました。これは、標準クラスのすべての名前が .NET 言語のキーワードと一致してはならないことを意味します。ただし、という単語Set
は、実際には大文字と小文字を区別しない VB.NET で使用されているため (そうですか?)、残念ながらそこには操作の余地がありません。
謎が解けました:)
エピローグ
Alex Y. による新しい回答は、次の .NET 4.0 インターフェイスについて説明しているMSDN ページへのリンクISet
ですHashedSet
。ハッピーエンド。