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

C#のUnionWithメソッドで2つのコレクションの和集合(一意な要素)を取得する方法

C#では、UnionWithメソッドを使用することで、2つのコレクションの和集合、つまり重複を除いた一意の要素だけをまとめて取得できます。このメソッドはHashSet<T>クラスに用意されており、呼び出し元のHashSet自体が更新されるという特徴があります。

前提となるデータの準備

ここでは、2つのDictionaryを例に説明します。まず、以下のようなDictionaryを用意しましょう。

Dictionary < string, int > dict1 = new Dictionary < string, int > ();
dict1.Add("pencil", 1);
dict1.Add("pen", 2);

Dictionary < string, int > dict2 = new Dictionary < string, int > ();
dict2.Add("pen", 3);

dict1には「pencil」と「pen」、dict2には「pen」が登録されています。「pen」は両方に存在するため、和集合では1回だけ登場することになります。

HashSetとUnionWithで和集合を求める

まず、1つ目のDictionaryのキーでHashSetを初期化し、続いてUnionWithメソッドに2つ目のDictionaryのキーを渡します。

HashSet < string > hSet = new HashSet < string > (dict1.Keys);
hSet.UnionWith(dict2.Keys);

UnionWithは重複する要素を自動的に除外するため、「pen」のように両方のコレクションに含まれるキーは1つにまとめられます。

サンプルコード(完全版)

全体の流れを確認できる完全なコードは以下の通りです。

using System;
using System.Collections.Generic;

public class Program {
    public static void Main() {
        Dictionary < string, int > dict1 = new Dictionary < string, int > ();
        dict1.Add("pencil", 1);
        dict1.Add("pen", 2);

        Dictionary < string, int > dict2 = new Dictionary < string, int > ();
        dict2.Add("pen", 3);

        HashSet < string > hSet = new HashSet <string > (dict1.Keys);
        hSet.UnionWith(dict2.Keys);

        Console.WriteLine("Merged Dictionary...");
        foreach(string val in hSet) {
            Console.WriteLine(val);
        }
    }
}

実行結果

Merged Dictionary...
pencil
pen

このように、2つのDictionaryのキーが統合され、重複のない一意のキーだけが出力されています。

補足:UnionWithのポイント

  • UnionWithは新しいコレクションを生成せず、元のHashSetを直接書き換えます。
  • LINQのUnionメソッドと似ていますが、こちらは遅延実行ではなく即座にセットへ反映されます。
  • キーの値(Value)ではなくキー同士を比較して統合されるため、Dictionaryのマージ用途では注意が必要です。
  1. C#のSingleOrDefault()メソッドの使い方をわかりやすく解説

    SingleOrDefault()メソッドとはC#のLINQに含まれるSingleOrDefault()メソッドは、シーケンスから単一の特定要素を返すメソッドです。大きな特徴は、要素がシーケンス内に存在しない場合でも例外をスローせず、その型のデフォルト値を返すという点にあります。たとえば参照型の場合は null、数値型の場合は 0 といったデフォルト値が返されるため、空のコレクションを安全に扱いたい場面で非常に便利です。Single()メソッドとの違い似た名前の Single() メソッドは、要素が存在しない場合や複数の要素が見つかった場合に例外(InvalidOperationExcepti

  2. 【C#】String.Join()メソッドで文字列配列を連結する方法

    String.Join()メソッドとはC#のString.Join()メソッドは、文字列配列のすべての要素を1つの文字列に連結するためのメソッドです。各要素の間には、引数で指定した区切り文字(セパレーター)が自動的に挿入されます。たとえば、区切り文字として改行コード「\n」を指定すれば、配列の各要素がそれぞれ別の行に配置された、複数行の文字列を簡単に作成できます。基本的な構文String.Join(\n, starray);第1引数: 要素間に挿入する区切り文字第2引数: 連結対象の文字列配列戻り値: 連結された1つの文字列サンプルコード以下は、5つの文字列要素を持つ配列を改行コードで連結し、