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

【C#】SortedSetオブジェクトが指定されたコレクションの真部分集合かどうかを確認する方法

C#では、SortedSet<T>クラスに用意されているIsProperSubsetOfメソッドを使うことで、あるSortedSetオブジェクトが指定されたコレクションの真部分集合(プロパー・サブセット)であるかどうかを簡単に確認できます。

真部分集合とは、基準となるコレクションのすべての要素を含みながら、そのコレクションそのものとは一致しない集合のことです。つまり、2つのセットがまったく同じ要素を持つ場合は、たとえ一方が他方の部分集合であっても「真部分集合」にはなりません。このメソッドは条件を満たす場合にtrue、満たさない場合にfalseを返します。

例1:真部分集合であるケース

まず、set2がset1の真部分集合になる例を見てみましょう。

using System;
using System.Collections.Generic;

public class Demo {
   public static void Main() {
      SortedSet<int> set1 = new SortedSet<int>();
      set1.Add(20);
      set1.Add(40);
      set1.Add(60);
      set1.Add(80);
      set1.Add(100);
      set1.Add(120);
      set1.Add(140);

      Console.WriteLine("SortedSet1の要素...");
      foreach (int res in set1) {
         Console.WriteLine(res);
      }

      SortedSet<int> set2 = new SortedSet<int>();
      set2.Add(20);
      set2.Add(40);
      set2.Add(60);

      Console.WriteLine("SortedSet2の要素...");
      foreach (int res in set2) {
         Console.WriteLine(res);
      }

      Console.WriteLine("SortedSet2はSortedSet1の真部分集合か? = " + set2.IsProperSubsetOf(set1));
   }
}

出力

このプログラムを実行すると、次のような出力が得られます。

SortedSet1の要素...
20
40
60
80
100
120
140
SortedSet2の要素...
20
40
60
SortedSet2はSortedSet1の真部分集合か? = True

この例では、set2(20・40・60)のすべての要素がset1に含まれており、しかもset1にはさらに別の要素(80・100・120・140)が存在するため、set2はset1の真部分集合であると判定され、結果はTrueになります。

例2:真部分集合でないケース

次に、両方のセットがまったく同じ要素を持つ場合の例を確認してみましょう。

using System;
using System.Collections.Generic;

public class Demo {
   public static void Main() {
      SortedSet<int> set1 = new SortedSet<int>();
      set1.Add(20);
      set1.Add(40);
      set1.Add(60);

      Console.WriteLine("SortedSet1の要素...");
      foreach (int res in set1) {
         Console.WriteLine(res);
      }

      SortedSet<int> set2 = new SortedSet<int>();
      set2.Add(20);
      set2.Add(40);
      set2.Add(60);

      Console.WriteLine("SortedSet2の要素...");
      foreach (int res in set2) {
         Console.WriteLine(res);
      }

      Console.WriteLine("SortedSet2はSortedSet1の真部分集合か? = " + set2.IsProperSubsetOf(set1));
   }
}

出力

このプログラムを実行すると、次のような出力が得られます。

SortedSet1の要素...
20
40
60
SortedSet2の要素...
20
40
60
SortedSet2はSortedSet1の真部分集合か? = False

この例では、set1とset2がまったく同じ要素(20・40・60)を持っているため、set2はset1の部分集合ではありますが「真部分集合」には該当せず、結果はFalseとなります。

まとめ

  • IsProperSubsetOfメソッドは、SortedSetが指定されたコレクションの真部分集合かどうかを判定し、結果をbool値で返します。
  • 真部分集合の条件は、「自分のすべての要素が相手コレクションに含まれる」かつ「相手コレクションと同一ではない」ことです。
  • 2つのセットが同一の場合、部分集合ではあっても真部分集合にはならないため、falseが返される点に注意しましょう。
  1. C#でHashSetに指定された要素が含まれているか確認する方法

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

  2. C#でHashSetと指定されたコレクションに共通の要素があるか確認する方法

    C#において、HashSetと指定されたコレクションとの間に共通の要素が存在するかどうかを確認したい場合は、Overlaps() メソッドを使用します。Overlaps() メソッドは、HashSetと引数で渡されたコレクションの間に共通する要素が1つでも存在すれば true を返し、まったく存在しなければ false を返します。このメソッドは System.Collections.Generic 名前空間に含まれており、引数として IEnumerable<T> 型のコレクションを受け取ります。例1:int型のHashSetの場合まずは、整数値を格納した2つのHashSetで共通