for WPF developers
Home Profile Tips 全記事一覧

Union 拡張メソッドで和集合を取得する

(2017/03/14 11:24:23 created.)

Union 拡張メソッドは 2 つのシーケンスの和集合で得られるシーケンスを生成します。Concat 拡張メソッドは重複する要素もそのまま含まれますが、Union 拡張メソッドは重複する要素は含みません。サンプルコードを以下に掲載します。

Program.cs
  1. namespace Tips_Linq
  2. {
  3.     using System;
  4.     using System.Linq;
  5.  
  6.     class Program
  7.     {
  8.         static void Main(string[] args)
  9.         {
  10.             var numbers1 = new int[] { 1, 2, 3 };
  11.             Console.WriteLine("コレクションの要素は {{ {0} }} です。", string.Join(", ", numbers1));
  12.  
  13.             var numbers2 = new int[] { 3, 4, 5 };
  14.             Console.WriteLine("コレクションの要素は {{ {0} }} です。", string.Join(", ", numbers2));
  15.  
  16.             var concatNumbers = numbers1.Concat(numbers2);
  17.             Console.WriteLine("コレクションの要素は {{ {0} }} です。", string.Join(", ", concatNumbers));
  18.  
  19.             var unionNumbers = numbers1.Union(numbers2);
  20.             Console.WriteLine("コレクションの要素は {{ {0} }} です。", string.Join(", ", unionNumbers));
  21.  
  22.             Console.ReadKey();
  23.         }
  24.     }
  25. }


出力結果を見てもわかるように、Concat 拡張メソッドと違って Union 拡張メソッドでは重複する要素が除外されています。

要素が独自クラスなどの場合、要素が重複しているかどうかを比較する方法を IEqualityComparer<TSource> インターフェースとして等値比較子を指定することができます。等値比較子の使い方は「Contains 拡張メソッドで指定した要素が含まれているかどうかを確認する」などを参照してください。