複数のセットを比較し、どれが等しいかどうかを調べる必要があるとします。C#のセットで動作する最適なデータ構造は何ですか?
最後に、複数のセットを比較し、最後のセット を作成し、各セットから一意のデータを取得する必要があります。また、別のセットで繰り返されているすべてのアイテム を処理する必要があります。
複数のセットを比較し、どれが等しいかどうかを調べる必要があるとします。C#のセットで動作する最適なデータ構造は何ですか?
最後に、複数のセットを比較し、最後のセット を作成し、各セットから一意のデータを取得する必要があります。また、別のセットで繰り返されているすべてのアイテム を処理する必要があります。
ためIntersectWith
、UnionWith
、ExceptWith
等のようなメソッドを公開することができ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を参照してください。
は、あなたが使用する必要がない重複を有する要素の集合を表すHashSet<T>
クラスを使用し、共通集合演算
「異なるセットで繰り返す」とはどういう意味ですか? **(1)**セットには重複が含まれるか、**(2)**セットには重複が含まれないかもしれないが、アイテムは複数のセットに存在する可能性がある。 –
"ベスト"コレクションは完全に文脈上のものです。場合によっては 'List'が最適です。時には' HashSet'、時には 'Dictionary'もあります。それらの違いを学び、この状況に最適なものを決定してください。 –