C#でHashSetが指定されたコレクションの部分集合(サブセット)かどうかを判定する方法
C#のHashSet<T>クラスには、あるHashSetが指定されたコレクションの部分集合(サブセット)であるかどうかを判定するためのIsSubsetOf()メソッドが用意されています。このメソッドは、現在のHashSetのすべての要素が引数に渡したコレクション内にも存在する場合にtrueを返し、そうでなければfalseを返します。
IsSubsetOfメソッドの基本
IsSubsetOf(IEnumerable<T>)メソッドの構文と動作は以下の通りです。
- 構文:
public bool IsSubsetOf (System.Collections.Generic.IEnumerable<T> other); - 戻り値:現在のHashSetが「other」の部分集合であればtrue、そうでなければfalse。
- 空のHashSetは、どのコレクションに対しても常に部分集合とみなされます(trueを返す)。
例1:部分集合ではないケース
まず、set1がset2の部分集合にならない例を見てみましょう。
using System;
using System.Collections.Generic;
public class Demo {
public static void Main(){
HashSet<string> set1 = new HashSet<string>();
set1.Add("EF");
set1.Add("OP");
Console.WriteLine("HashSet1の要素");
foreach(string val in set1){
Console.WriteLine(val);
}
HashSet<string> set2 = new HashSet<string>();
set2.Add("KL");
set2.Add("MN");
set2.Add("OP");
set2.Add("QR");
Console.WriteLine("HashSet2の要素");
foreach(string val in set2){
Console.WriteLine(val);
}
Console.WriteLine("set1はset2の部分集合か? " + set1.IsSubsetOf(set2));
}
}出力結果
HashSet1の要素 EF OP HashSet2の要素 KL MN OP QR set1はset2の部分集合か? False
この例では、set1に含まれる「EF」がset2に存在しないため、falseが返されます。部分集合と判定されるには、set1の全要素がset2に含まれている必要があります。
例2:部分集合であるケース
次に、set1がset2の部分集合になる例を見てみましょう。
using System;
using System.Collections.Generic;
public class Demo {
public static void Main(){
HashSet<string> set1 = new HashSet<string>();
set1.Add("EF");
set1.Add("OP");
Console.WriteLine("HashSet1の要素");
foreach(string val in set1){
Console.WriteLine(val);
}
HashSet<string> set2 = new HashSet<string>();
set2.Add("EF");
set2.Add("OP");
set2.Add("QR");
Console.WriteLine("HashSet2の要素");
foreach(string val in set2){
Console.WriteLine(val);
}
Console.WriteLine("set1はset2の部分集合か? " + set1.IsSubsetOf(set2));
}
}出力結果
HashSet1の要素 EF OP HashSet2の要素 EF OP QR set1はset2の部分集合か? True
この例では、set1の要素「EF」と「OP」がどちらもset2に含まれているため、trueが返されます。
まとめ
HashSetが別のコレクションの部分集合かどうかを調べたい場合は、IsSubsetOf()メソッドを使用します。類似のメソッドとして、上位集合を判定するIsSupersetOf()、真の部分集合を判定するIsProperSubsetOf()なども用意されており、これらを組み合わせることで柔軟な集合操作が可能です。
-
C#でHashSetと指定されたコレクションに共通の要素があるか確認する方法
C#において、HashSetと指定されたコレクションとの間に共通の要素が存在するかどうかを確認したい場合は、Overlaps() メソッドを使用します。Overlaps() メソッドは、HashSetと引数で渡されたコレクションの間に共通する要素が1つでも存在すれば true を返し、まったく存在しなければ false を返します。このメソッドは System.Collections.Generic 名前空間に含まれており、引数として IEnumerable<T> 型のコレクションを受け取ります。例1:int型のHashSetの場合まずは、整数値を格納した2つのHashSetで共通
-
C#のHashSetとは?重複要素を自動的に削除できるSetコレクションの使い方
C#のHashSetとは C#のHashSet<T>は、System.Collections.Generic名前空間に属する最適化されたセットコレクションです。最大の特徴は、同じ要素(重複する値)を自動的に排除して格納する点にあります。そのため、配列やリストの中から重複した文字列や要素を取り除きたい場合に非常に便利です。 さらに、HashSetは内部でハッシュテーブルを使用しているため、要素の検索・追加・削除が高速に行えるというメリットもあります。 HashSetで重複する文字列を削除するサンプルコード 以下は、C#のHashSetを使って、文字列配列から重複する単語を削除する例