2016-03-30 17 views
0

複数のセットを比較し、どれが等しいかどうかを調べる必要があるとします。C#のセットで動作する最適なデータ構造は何ですか?

最後に、複数のセットを比較し、最後のセット を作成し、各セットから一意のデータを取得する必要があります。また、別のセットで繰り返されているすべてのアイテム を処理する必要があります。

+0

「異なるセットで繰り返す」とはどういう意味ですか? **(1)**セットには重複が含まれるか、**(2)**セットには重複が含まれないかもしれないが、アイテムは複数のセットに存在する可能性がある。 –

+0

"ベスト"コレクションは完全に文脈上のものです。場合によっては 'List'が最適です。時には' HashSet'、時には 'Dictionary'もあります。それらの違いを学び、この状況に最適なものを決定してください。 –

答えて

4

ためIntersectWithUnionWithExceptWith等のようなメソッドを公開することができSystem.Collections.Generic.HashSet<T>

ことができます好きなことを作成します。その後、

var hashSet = new HashSet<T>(IEnumerable<T>)

と比較するためのメソッドを使用します。

hashSet.SetEquals(IEnumerable<T> list)は - HashSetのと、リストが同じ項目

hashSet.Overlaps(IEnumerable<T> list)が含まれている場合はtrueを返します - HashSetのリスト

hashSet.IsSubsetOf(IEnumerable<T> list)からのアイテムのいずれかが含まれている場合はtrueを返します - HashSetのは、リストのサブセットである場合はtrueを返します。

hashSet.IsProperSubsetOf(IEnumerable<T> list)を(順番は関係ありません) - IsSubsetOfと同じですが、順番に関係

hashSet.IsSupersetOf(IEnumerable<T> list) - RETますHashSetのは、リストのスーパーセットである場合

hashSet.IsProperSupersetOf(IEnumerable<T> list)を(順番は関係ありません)真URN - 問題

IsSupersetOfと同じですが、順序も変更するための方法があります:

hashSet.UnionWith(IEnumerable<T> list)は - 含むようにHashSetのを修正します現在のハッシュセットにある 、またはリストまたはその両方に存在する要素。

hashSet.symmetricExceptWith(IEnumerable<T> list) - 現在のハッシュセットまたはリストにのみ存在し、両方ではない が存在する要素を含むようにhashSetを変更します。

hashSet.IntersectWith(IEnumerable<T> list) - 現在のハッシュセットとリストに存在する の要素を含むようにhashSetを変更します。

HashSetの詳細については、MSDN articleを参照してください。

3

は、あなたが使用する必要がない重複を有する要素の集合を表すHashSet<T>クラスを使用し、共通集合演算

関連する問題