3

最も効率的な方法で、あるセットを別のセットから取り除こうとしています。したがって、次のセット A と B がある場合、A_minus_B は {1, 2, 6} を与えるはずです。これが私が持っているものですが、それが最も効率的な方法ではないと確信しています。

HashSet<int> A = new HashSet<int>{ 1, 2, 3, 4, 5, 6 };
HashSet<int> B = new HashSet<int> { 3, 4, 5 };

HashSet<int> A_minus_B = new HashSet<int>(A);

foreach(int n in A){
    if(B.Contains(n)) A_minus_B.Remove(n);
}
4

3 に答える 3

10

メソッドを使用できますExcept()。コードは次のとおりです。

HashSet<int> A_minus_B = new HashSet<int>(A.Except(B)); 
于 2013-04-17T18:08:18.480 に答える
2

これを使って :

var setA= new HashSet<int>();
var setB= new HashSet<int>();
...

var remaining = new HashSet<int>(setA);
remaining.ExceptWith(setB);

remainingは、新しいフィルター処理されたセットです。

于 2013-04-17T18:09:55.847 に答える
1

にあるアイテムを削除することで変更されます。AB

A.ExceptWith(B);

Except新しいセットを返す which を使用することもできます。

于 2013-04-17T18:09:09.747 に答える