C#
 Computer >> コンピューター >  >> プログラミング >> C#

【C#】HashSetが指定されたコレクションの真のスーパーセットかどうかを確認する方法

C#の HashSet<T> が、指定されたコレクションの「真のスーパーセット(proper superset)」であるかどうかを確認するには、IsProperSupersetOf メソッドを使用します。このメソッドは、現在の HashSet が引数に渡したコレクションのすべての要素を含み、さらにそのコレクションには存在しない要素を少なくとも1つ以上持っている場合に true を返します。

両者の要素が完全に一致する場合は「等しい集合」となり、真のスーパーセットとはみなされないため false が返される点に注意してください。

例1:int型のHashSetの場合

using System;
using System.Collections.Generic;
public class Demo {
   public static void Main(){
      HashSet<int> set1 = new HashSet<int>();
      set1.Add(30);
      set1.Add(60);
      set1.Add(70);
      set1.Add(80);
      set1.Add(100);
      set1.Add(125);
      set1.Add(150);
      set1.Add(200);
      Console.WriteLine("HashSet1の要素");
      foreach(int val in set1){
         Console.WriteLine(val);
      }
      HashSet<int> set2 = new HashSet<int>();
      set2.Add(30);
      set2.Add(60);
      set2.Add(70);
      Console.WriteLine("HashSet2の要素");
      foreach(int val in set2){
         Console.WriteLine(val);
      }
      Console.WriteLine("set1はset2の真のスーパーセットか?: " + set1.IsProperSupersetOf(set2));
   }
}

出力結果

HashSet1の要素
30
60
70
80
100
125
150
200
HashSet2の要素
30
60
70
set1はset2の真のスーパーセットか?: True

この例では、set1(8個の要素)が set2(3個の要素)のすべての要素を含んでおり、かつ余分な要素も持っているため、IsProperSupersetOf メソッドは true を返しています。

例2:string型のHashSetの場合

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("GH");
      set1.Add("IJ");
      set1.Add("KL");
      set1.Add("MN");
      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("KL");
      Console.WriteLine("HashSet2の要素");
      foreach(string val in set2){
         Console.WriteLine(val);
      }
      Console.WriteLine("set1はset2の真のスーパーセットか?: " + set1.IsProperSupersetOf(set2));
   }
}

出力結果

HashSet1の要素
AB
CD
EF
GH
IJ
KL
MN
OP
HashSet2の要素
EF
KL
set1はset2の真のスーパーセットか?: True

文字列を格納した HashSet についても同様に、set1 が set2 のすべての要素("EF" と "KL")を含み、それ以外の要素も持っているため、true が返されます。

IsProperSupersetOfメソッドのポイント

  • 戻り値は bool 型で、真のスーパーセットであれば true、そうでなければ false を返します。
  • 現在の HashSet の要素数が、比較対象のコレクションの要素数以下の場合は常に false になります。
  • 比較対象が空のコレクションで、現在の HashSet に1つでも要素が存在すれば true を返します。
  • 両者の要素が完全に一致する場合は false となるため、「単なるスーパーセット」を判定したい場合は IsSupersetOf メソッドを使用してください。
  1. C#のHashSetとは?重複要素を自動的に削除できるSetコレクションの使い方

    C#のHashSetとは C#のHashSet<T>は、System.Collections.Generic名前空間に属する最適化されたセットコレクションです。最大の特徴は、同じ要素(重複する値)を自動的に排除して格納する点にあります。そのため、配列やリストの中から重複した文字列や要素を取り除きたい場合に非常に便利です。 さらに、HashSetは内部でハッシュテーブルを使用しているため、要素の検索・追加・削除が高速に行えるというメリットもあります。 HashSetで重複する文字列を削除するサンプルコード 以下は、C#のHashSetを使って、文字列配列から重複する単語を削除する例

  2. JavaのHashSetクラスとは?使い方とサンプルコードを解説

    HashSetとはHashSetは、AbstractSetクラスを継承し、Setインターフェースを実装したコレクションクラスです。内部的にはハッシュテーブルを使用して要素を格納します。ハッシュテーブルは「ハッシュ化(hashing)」と呼ばれる仕組みによって情報を管理します。ハッシュ化では、キーの内容をもとに「ハッシュコード」と呼ばれる一意の値が算出されます。このハッシュコードがインデックスとして利用され、キーに関連付けられたデータがその位置に格納されます。キーからハッシュコードへの変換は自動的に行われるため、開発者が意識する必要はありません。HashSetの主な特徴重複した要素は格納できない