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

C#で2つのHashSetを結合する方法|UnionWithメソッドの使い方を解説

C#では、HashSet<T>クラスに用意されているUnionWithメソッドを使うことで、2つのHashSetの和集合(Union)を簡単に求められます。この記事では、具体的なサンプルコードと実行結果をもとに、HashSet同士を結合する方法をわかりやすく解説します。

UnionWithメソッドとは

UnionWithは、呼び出し元のHashSetに対して、引数で渡した別のコレクションの要素をすべて追加するメソッドです。重複する要素は自動的に除外されるため、結果として「どちらか一方(または両方)に含まれるすべての要素」からなる和集合が得られます。

例1:同じ要素を持つ2つのHashSetの結合

using System;
using System.Collections.Generic;

public class Demo {
   public static void Main() {
      HashSet<int> set1 = new HashSet<int>();
      set1.Add(100);
      set1.Add(200);
      set1.Add(300);
      set1.Add(400);
      set1.Add(500);
      set1.Add(600);

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

      HashSet<int> set2 = new HashSet<int>();
      set2.Add(100);
      set2.Add(200);
      set2.Add(300);
      set2.Add(400);
      set2.Add(500);
      set2.Add(600);

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

      Console.WriteLine("結合後(Union)...");
      set1.UnionWith(set2);

      foreach(int ele in set1) {
         Console.WriteLine(ele);
      }
   }
}

実行結果

HashSet1の要素...
100
200
300
400
500
600
HashSet2の要素...
100
200
300
400
500
600
結合後(Union)...
100
200
300
400
500
600

この例では、set1とset2がまったく同じ要素を持っているため、結合しても重複は取り除かれ、元の6つの要素だけが出力されます。これはHashSetが持つ「重複した値を格納できない」という特性によるものです。

例2:異なる要素を含む2つのHashSetの結合

次に、片方のセットにしか存在しない要素がある場合の動作を確認してみましょう。

using System;
using System.Collections.Generic;

public class Demo {
   public static void Main() {
      HashSet<int> set1 = new HashSet<int>();
      set1.Add(100);
      set1.Add(200);
      set1.Add(300);
      set1.Add(400);
      set1.Add(500);
      set1.Add(600);

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

      HashSet<int> set2 = new HashSet<int>();
      set2.Add(100);
      set2.Add(250);
      set2.Add(300);

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

      Console.WriteLine("結合後(Union)...");
      set1.UnionWith(set2);

      foreach(int ele in set1) {
         Console.WriteLine(ele);
      }
   }
}

実行結果

HashSet1の要素...
100
200
300
400
500
600
HashSet2の要素...
100
250
300
結合後(Union)...
100
200
300
400
500
600
250

ここでは、set2だけが持つ「250」が結合結果に新たに追加され、両方に含まれる重複要素(100・300)は1つにまとめられています。このようにUnionWithを使えば、2つのHashSetに含まれる全要素を重複なく1つのセットに統合できます。

まとめ

  • C#で2つのHashSetを結合して和集合を求めるには、UnionWithメソッドを使用します。
  • UnionWithは呼び出し元のセット自体を書き換える破壊的なメソッドです。
  • 重複する要素は自動的に排除されるため、結果にはユニークな要素のみが残ります。
  • 元のセットを変更せずに新しい和集合を作りたい場合は、LINQのUnionメソッドを利用すると便利です。
  1. C#で2つのDictionary(辞書)をマージして結合する方法

    C#では、Dictionary<string, int> 型の2つの辞書を、HashSet と UnionWith() メソッドを組み合わせることで簡単にマージできます。本記事では、その具体的な手順をサンプルコード付きで解説します。 ステップ1:2つの辞書を作成する まず、マージ対象となる2つの辞書を用意します。 Dictionary<string, int> dict1 = new Dictionary<string, int>(); dict1.Add(laptop, 1); dict1.Add(desktop, 2); Dictionary<s

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

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