(両方のセットを「等しい」としてグループ化することを想定しています。質問はそれほど明確ではありません)
LINQの場合によくあることですが、これを実現するための足場はすでに存在し、実行する必要があるのはIEqualityComparer<T>
、適切なメソッドにカスタムを提供することです。この場合、これはこのオーバーロードを使用することを意味します。
IEqualityComparer<ISet<T>>
共通部分が両方と同じセットである場合、2つのセットが等しいと宣言するジェネリックは次のとおりです。
class SetComparer<T> : IEqualityComparer<ISet<T>> {
public bool Equals(ISet<T> lhs, ISet<T> rhs) {
// null checks omitted
return lhs.SetEquals(rhs);
}
public int GetHashCode(ISet<T> set) {
// Not the best choice for a hash function in general,
// but in this case it's just fine.
return set.Count;
}
}
そして、同じ傘の下で両方のセットをグループ化する方法は次のとおりです。
new List<HashSet<int>> {
new HashSet<int> { 4 },
new HashSet<int> { 4 }
}.GroupBy (x => x, new SetComparer<int>()).Count();