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

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

C#において、HashSetと指定されたコレクションとの間に共通の要素が存在するかどうかを確認したい場合は、Overlaps() メソッドを使用します。

Overlaps() メソッドは、HashSetと引数で渡されたコレクションの間に共通する要素が1つでも存在すれば true を返し、まったく存在しなければ false を返します。このメソッドは System.Collections.Generic 名前空間に含まれており、引数として IEnumerable<T> 型のコレクションを受け取ります。

例1:int型のHashSetの場合

まずは、整数値を格納した2つのHashSetで共通要素を確認する例を見てみましょう。

using System;
using System.Collections.Generic;

public class Demo {
   public static void Main(){
      HashSet<int> set1 = new HashSet<int>();
      set1.Add(25);
      set1.Add(50);
      set1.Add(75);
      set1.Add(100);
      set1.Add(125);
      set1.Add(150);

      Console.WriteLine("Elements in HashSet1");
      foreach(int val in set1){
         Console.WriteLine(val);
      }

      HashSet<int> set2 = new HashSet<int>();
      set2.Add(30);
      set2.Add(60);
      set2.Add(100);
      set2.Add(150);
      set2.Add(200);
      set2.Add(250);

      Console.WriteLine("Elements in HashSet2");
      foreach(int val in set2){
         Console.WriteLine(val);
      }

      Console.WriteLine("Do they share common elements? " + set1.Overlaps(set2));
   }
}

出力結果

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

Elements in HashSet1
25
50
75
100
125
150
Elements in HashSet2
30
60
100
150
200
250
Do they share common elements? True

この例では、set1とset2の両方に「100」と「150」が含まれているため、Overlaps()True を返しています。

例2:string型のHashSetの場合

続いて、文字列を格納したHashSetでの使用例を見てみましょう。

using System;
using System.Collections.Generic;

public class Demo {
   public static void Main(){
      HashSet<String> set1 = new HashSet<String>();
      set1.Add("Nathan");
      set1.Add("Tim");
      set1.Add("Tom");
      set1.Add("Jack");
      set1.Add("Steve");
      set1.Add("David");

      Console.WriteLine("Elements in HashSet1");
      foreach(string val in set1){
         Console.WriteLine(val);
      }

      HashSet<String> set2 = new HashSet<String>();
      set2.Add("Tom");
      set2.Add("Jack");
      set2.Add("Kevin");

      Console.WriteLine("Elements in HashSet2");
      foreach(string val in set2){
         Console.WriteLine(val);
      }

      Console.WriteLine("Do they share common elements? " + set1.Overlaps(set2));
   }
}

出力結果

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

Elements in HashSet1
Nathan
Tim
Tom
Jack
Steve
David
Elements in HashSet2
Tom
Jack
Kevin
Do they share common elements? True

この例では、「Tom」と「Jack」が両方のHashSetに共通して存在するため、結果は True となります。

まとめ

Overlaps() メソッドを使えば、HashSetと他のコレクションの間に共通要素が存在するかどうかを簡単に判定できます。共通要素が1つ見つかった時点で処理が完了するため、効率的に動作するのも特徴です。なお、共通するすべての要素を取得したい場合は、IntersectWith() メソッドやLINQの Intersect() を使うとよいでしょう。

  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()メ