C#でHashSetが指定されたコレクションのスーパーセットかどうかを確認する方法
C#において、ある HashSet が指定されたコレクションのスーパーセット(上位集合)であるかどうかを確認するには、IsSupersetOf() メソッドを使用します。このメソッドは、現在の HashSet オブジェクトが引数に渡したコレクションのすべての要素を含んでいる場合に True を返し、そうでなければ False を返します。
IsSupersetOf() メソッドの基本構文
public bool IsSupersetOf (System.Collections.Generic.IEnumerable<T> other);
引数には比較対象のコレクションを指定し、戻り値はブール値(true / false)です。
例1:set1 が set2 のスーパーセットである場合
まずは、HashSet1 が HashSet2 のすべての要素を含んでいるケースを見てみましょう。
using System;
using System.Collections.Generic;
public class Demo {
public static void Main(){
HashSet<string> set1 = new HashSet<string>();
set1.Add("AB");
set1.Add("CD");
set1.Add("EF");
set1.Add("AB");
set1.Add("IJ");
set1.Add("KL");
set1.Add("EF");
set1.Add("OP");
Console.WriteLine("Elements in HashSet1");
foreach(string val in set1){
Console.WriteLine(val);
}
HashSet<string> set2 = new HashSet<string>();
set2.Add("EF");
set2.Add("KL");
Console.WriteLine("Elements in HashSet2");
foreach(string val in set2){
Console.WriteLine(val);
}
Console.WriteLine("Is set1 a superset of set2? "+set1.IsSupersetOf(set2));
}
}出力結果
上記のコードを実行すると、次のような出力が得られます。
Elements in HashSet1 AB CD EF IJ KL OP Elements in HashSet2 EF KL Is set1 a superset of set2? True
この例では、HashSet2 の要素「EF」と「KL」はどちらも HashSet1 に含まれているため、IsSupersetOf() メソッドは True を返しています。
例2:set1 が set2 のスーパーセットではない場合
次に、HashSet1 に含まれていない要素が HashSet2 側に存在するケースを確認してみます。
using System;
using System.Collections.Generic;
public class Demo {
public static void Main(){
HashSet<string> set1 = new HashSet<string>();
set1.Add("IJ");
set1.Add("KL");
set1.Add("EF");
set1.Add("OP");
Console.WriteLine("Elements in 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("Elements in HashSet2");
foreach(string val in set2){
Console.WriteLine(val);
}
Console.WriteLine("Is set1 a superset of set2? "+set1.IsSupersetOf(set2));
}
}出力結果
上記のコードを実行すると、次のような出力が得られます。
Elements in HashSet1 IJ KL EF OP Elements in HashSet2 KL MN OP QR Is set1 a superset of set2? False
この例では、HashSet2 の要素「MN」と「QR」が HashSet1 に存在しないため、IsSupersetOf() メソッドは False を返します。
まとめ
IsSupersetOf() メソッドを使えば、HashSet が別のコレクションのスーパーセット(すべての要素を包含している集合)かどうかを簡単に判定できます。なお、HashSet では重複する要素は自動的に除外されるため、同じ値を複数回 Add() しても1つとして扱われる点にも注意してください。部分集合かどうかを判定したい場合は、対になる IsSubsetOf() メソッドを使用します。
-
C#のHashSetとは?重複要素を自動的に削除できるSetコレクションの使い方
C#のHashSetとは C#のHashSet<T>は、System.Collections.Generic名前空間に属する最適化されたセットコレクションです。最大の特徴は、同じ要素(重複する値)を自動的に排除して格納する点にあります。そのため、配列やリストの中から重複した文字列や要素を取り除きたい場合に非常に便利です。 さらに、HashSetは内部でハッシュテーブルを使用しているため、要素の検索・追加・削除が高速に行えるというメリットもあります。 HashSetで重複する文字列を削除するサンプルコード 以下は、C#のHashSetを使って、文字列配列から重複する単語を削除する例
-
JavaのHashSetクラスとは?使い方とサンプルコードを解説
HashSetとはHashSetは、AbstractSetクラスを継承し、Setインターフェースを実装したコレクションクラスです。内部的にはハッシュテーブルを使用して要素を格納します。ハッシュテーブルは「ハッシュ化(hashing)」と呼ばれる仕組みによって情報を管理します。ハッシュ化では、キーの内容をもとに「ハッシュコード」と呼ばれる一意の値が算出されます。このハッシュコードがインデックスとして利用され、キーに関連付けられたデータがその位置に格納されます。キーからハッシュコードへの変換は自動的に行われるため、開発者が意識する必要はありません。HashSetの主な特徴重複した要素は格納できない