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

C#でSortedSetオブジェクトが指定されたコレクションの真の上位集合(Proper Superset)かどうかを確認する方法

C#のSortedSet<T>クラスでは、IsProperSupersetOfメソッドを使うことで、あるSortedSetオブジェクトが指定されたコレクションの「真の上位集合(Proper Superset)」であるかどうかを簡単に確認できます。

真の上位集合とは、相手のコレクションに含まれるすべての要素を持ち、かつ相手とは異なる要素を少なくとも1つ以上含む集合のことです。つまり、set2がset1の真の上位集合であるための条件は、「set1の全要素がset2に含まれる」かつ「set2はset1よりも厳密に多くの要素を持つ」となります。条件を満たす場合はtrue、満たさない場合はfalseが返されます。

例1:真の上位集合の基本的な判定

次のコードは、IsProperSupersetOfメソッドを使用して、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.IsProperSupersetOf(set1));
   }
}

出力結果

上記のコードを実行すると、次のような出力が得られます。

SortedSet1の要素...
10
20
30
40
50
60
SortedSet2の要素...
10
20
30
40
50
60
70
80
90
100
SortedSet2はSortedSet1の真の上位集合か? = True

この例では、set2(10〜100)はset1(10〜60)のすべての要素を含み、さらに70〜100という追加の要素を持っています。そのため、IsProperSupersetOfメソッドはTrueを返します。

例2:重複要素を含む場合の挙動

続いて、別の例を見てみましょう。この例では、同じ値を複数回追加した場合の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(10);
      set1.Add(10);
      set1.Add(10);
      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.IsProperSupersetOf(set1));
   }
}

出力結果

上記のコードを実行すると、次のような出力が得られます。

SortedSet1の要素...
10
SortedSet2の要素...
10
20
30
40
50
60
70
80
90
100
SortedSet2はSortedSet1の真の上位集合か? = True

SortedSetは重複する値を格納しないため、set1に10を4回追加しても、実際に保持されるのは「10」だけです。出力結果でも10は1度しか表示されていません。それでもset2はset1の唯一の要素(10)を含み、さらに多くの要素を持っているため、判定結果はTrueとなります。

  1. 【C#】HashSetが指定されたコレクションの真部分集合かどうかを判定する方法

    C#の HashSet<T> クラスには、あるコレクションが別のコレクションに対して「真部分集合(proper subset)」であるかどうかを判定するためのメソッド IsProperSubsetOf() が用意されています。真部分集合とは、対象となるコレクションのすべての要素を含み、かつ相手側が自分には含まれない要素を少なくとも1つ持っている状態を指します。つまり、2つの集合が完全に一致する場合は「真部分集合」とは見なされず、False が返されます。この記事では、実際のコード例を使って IsProperSubsetOf() メソッドの使い方と動作を詳しく解説します。サンプルコー

  2. C#でHashSetに指定された要素が含まれているか確認する方法

    C#のHashSet<T>に特定の要素が含まれているかどうかを確認するには、Contains()メソッドを使用します。このメソッドは、指定した要素がHashSet内に存在する場合はtrue、存在しない場合はfalseを返します。Contains()メソッドの基本構文public bool Contains (T item);引数には検索対象の要素を渡します。HashSetはハッシュテーブルを基盤としているため、要素の検索はO(1)の計算量で実行でき、非常に高速です。例1:数値型のHashSetでContains()を使う以下は、int型のHashSetに対してContains()メ