C#でSortedSetが指定されたコレクションのスーパーセットかどうかを確認する方法
C#のSortedSet<T>クラスには、あるセットが指定されたコレクションのスーパーセット(上位集合)であるかどうかを判定するためのIsSupersetOf()メソッドが用意されています。この記事では、具体的なコード例を通じてその使い方を解説します。
IsSupersetOf()メソッドとは
IsSupersetOf(IEnumerable<T> other)は、現在のSortedSetが引数で渡されたコレクションのすべての要素を含んでいる場合にtrueを返し、そうでない場合はfalseを返します。スーパーセットとは、集合論において「ある集合が別の集合のすべての要素を含む」関係を指します。
例1:文字列のSortedSetで確認する
まず、文字列型のSortedSetを使った例を見てみましょう。
using System;
using System.Collections.Generic;
public class Demo {
public static void Main() {
SortedSet<string> set1 = new SortedSet<string>();
set1.Add("CD");
set1.Add("CD"); // 重複要素は無視される
set1.Add("CD");
set1.Add("CD");
Console.WriteLine("SortedSet1の要素...");
foreach (string res in set1) {
Console.WriteLine(res);
}
SortedSet<string> set2 = new SortedSet<string>();
set2.Add("BC");
set2.Add("CD");
set2.Add("DE");
set2.Add("EF");
set2.Add("AB");
set2.Add("HI");
set2.Add("JK");
Console.WriteLine("SortedSet2の要素...");
foreach (string res in set2) {
Console.WriteLine(res);
}
Console.WriteLine("SortedSet2はSortedSet1のスーパーセットか? = " + set2.IsSupersetOf(set1));
}
}出力結果
SortedSet1の要素... CD SortedSet2の要素... AB BC CD DE EF HI JK SortedSet2はSortedSet1のスーパーセットか? = True
この例では、set1に「CD」を4回追加していますが、SortedSetは重複する要素を持たないため、実際には「CD」1つだけが格納されます。set2には「CD」が含まれているため、set2はset1のスーパーセットであると判定され、Trueが出力されます。
例2:整数のSortedSetで確認する
次に、整数型のSortedSetを使った別の例です。
using System;
using System.Collections.Generic;
public class Demo {
public static void Main() {
SortedSet<int> set1 = new SortedSet<int>();
set1.Add(10);
set1.Add(20);
set1.Add(30);
set1.Add(40);
set1.Add(50);
set1.Add(60);
Console.WriteLine("SortedSet1の要素...");
foreach (int res in set1) {
Console.WriteLine(res);
}
SortedSet<int> set2 = new SortedSet<int>();
set2.Add(10);
set2.Add(20);
set2.Add(30);
set2.Add(40);
set2.Add(50);
set2.Add(60);
set2.Add(70);
set2.Add(80);
set2.Add(90);
set2.Add(100);
Console.WriteLine("SortedSet2の要素...");
foreach (int res in set2) {
Console.WriteLine(res);
}
Console.WriteLine("SortedSet2はSortedSet1のスーパーセットか? = " + set2.IsSupersetOf(set1));
}
}出力結果
SortedSet1の要素... 10 20 30 40 50 60 SortedSet2の要素... 10 20 30 40 50 60 70 80 90 100 SortedSet2はSortedSet1のスーパーセットか? = True
この例では、set1の要素(10〜60)がすべてset2にも含まれており、さらにset2には追加の要素(70〜100)があります。したがって、set2はset1のスーパーセットであり、結果はTrueとなります。
ポイントまとめ
- IsSupersetOf()は、現在のセットが引数のコレクションのすべての要素を含む場合に
trueを返します。 - SortedSetは自動的にソートされ、重複要素は格納されません。
- 逆に、サブセット(部分集合)かどうかを確認したい場合はIsSubsetOf()メソッドを使用します。
-
C#でHashSetに指定された要素が含まれているか確認する方法
C#のHashSet<T>に特定の要素が含まれているかどうかを確認するには、Contains()メソッドを使用します。このメソッドは、指定した要素がHashSet内に存在する場合はtrue、存在しない場合はfalseを返します。Contains()メソッドの基本構文public bool Contains (T item);引数には検索対象の要素を渡します。HashSetはハッシュテーブルを基盤としているため、要素の検索はO(1)の計算量で実行でき、非常に高速です。例1:数値型のHashSetでContains()を使う以下は、int型のHashSetに対してContains()メ
-
C#でHashSetと指定されたコレクションに共通の要素があるか確認する方法
C#において、HashSetと指定されたコレクションとの間に共通の要素が存在するかどうかを確認したい場合は、Overlaps() メソッドを使用します。Overlaps() メソッドは、HashSetと引数で渡されたコレクションの間に共通する要素が1つでも存在すれば true を返し、まったく存在しなければ false を返します。このメソッドは System.Collections.Generic 名前空間に含まれており、引数として IEnumerable<T> 型のコレクションを受け取ります。例1:int型のHashSetの場合まずは、整数値を格納した2つのHashSetで共通