C#のSortedSetが指定されたコレクションのサブセットかどうかを確認する方法
C#のSortedSet<T>クラスには、あるセットが指定されたコレクションのサブセット(部分集合)であるかどうかを判定するためのIsSubsetOfメソッドが用意されています。このメソッドは、現在のSortedSetのすべての要素が引数に渡したコレクションに含まれている場合にtrueを返し、そうでなければfalseを返します。
以下に具体的なコード例を示します。
例1:基本的な使い方
using System;
using System.Collections.Generic;
public class Demo {
public static void Main(){
SortedSet<string> set1 = new SortedSet<string>();
set1.Add("AB");
set1.Add("BC");
set1.Add("CD");
set1.Add("EF");
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("SortedSet1はSortedSet2のサブセットか? = " + set1.IsSubsetOf(set2));
}
}出力結果
上記のコードを実行すると、次のような出力が得られます。
SortedSet1の要素... AB BC CD EF SortedSet2の要素... AB BC CD DE EF HI JK SortedSet1はSortedSet2のサブセットか? = True
この例では、set1のすべての要素(AB、BC、CD、EF)がset2にも含まれているため、IsSubsetOfメソッドはTrueを返しています。
例2:重複した要素を追加した場合
次に、同じ要素を複数回追加した場合の動作を見てみましょう。SortedSetは重複する要素を自動的に除外するため、同じ値を何度追加しても1つの要素として扱われます。
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("SortedSet1はSortedSet2のサブセットか? = " + set1.IsSubsetOf(set2));
}
}出力結果
SortedSet1の要素... CD SortedSet2の要素... AB BC CD DE EF HI JK SortedSet1はSortedSet2のサブセットか? = True
「CD」を4回追加しましたが、SortedSetは重複を許さないため、set1には「CD」が1つだけ格納されています。そして「CD」はset2に含まれているため、結果はTrueとなります。
ポイントまとめ
IsSubsetOfメソッドは、現在のセットの全要素が指定コレクションに含まれる場合にtrueを返します。- 空のセットは、任意のコレクションのサブセットとみなされます(常に
true)。 - SortedSetは要素を自動的にソートし、重複を排除します。
- 類似のメソッドとして、上位集合を判定する
IsSupersetOfや、真部分集合を判定するIsProperSubsetOfなどもあります。
-
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で共通