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

C# LINQのUnion・Intersect・Except演算子とは?違いと使い方を実例で解説

C#のLINQには、複数のコレクションを操作するための集合演算子が用意されています。代表的なものが「Union(和集合)」「Intersect(積集合)」「Except(差集合)」の3つです。それぞれの動作の違いを理解しておくと、データの絞り込みや結合処理を簡潔に記述できるようになります。

Union(和集合)

Unionは、複数のコレクションを1つに結合し、重複を除いた一意な要素だけを持つ新しいコレクションを返します。両方のシーケンスに含まれる要素は1回だけ出力される点が特徴です。

Intersect(積集合)

Intersectは、両方の入力シーケンスに共通して存在する要素のみを返します。片方にしか存在しない要素は結果に含まれません。

Except(差集合)

Exceptは、最初の入力シーケンスには存在するが、2番目のシーケンスには存在しない要素を返します。引数の順序によって結果が変わるため、注意が必要です。

サンプルコード

以下の例では、2つの整数配列に対して3つの演算子を適用し、それぞれの結果をコンソールに出力しています。

class Program{
    static void Main(){
        int[] count1 = { 1, 2, 3, 4 };
        int[] count2 = { 2, 4, 7 };

        var resultUnion = count1.Union(count2);
        var resultIntersect = count1.Intersect(count2);
        var resultExcept = count1.Except(count2);

        System.Console.WriteLine("Union");
        foreach (var item in resultUnion){
            Console.WriteLine(item);
        }

        System.Console.WriteLine("Intersect");
        foreach (var item in resultIntersect){
            Console.WriteLine(item);
        }

        System.Console.WriteLine("Except");
        foreach (var item in resultExcept){
            Console.WriteLine(item);
        }

        Console.ReadKey();
    }
}

実行結果

Union
1
2
3
4
7
Intersect
2
4
Except
1
3

結果のポイント

Unionでは、count1 の {1, 2, 3, 4} と count2 の {2, 4, 7} を結合し、重複している「2」と「4」が1回ずつにまとめられて {1, 2, 3, 4, 7} となっています。

Intersectでは、両方の配列に共通する「2」と「4」だけが出力されます。

Exceptでは、count1 に含まれるが count2 には含まれない「1」と「3」が返されます。このように、これらの演算子を使い分けることで、SQLの集合演算のような処理をメソッドチェーンだけで直感的に記述できます。

  1. C言語の演算子とパンクチュエータ(区切り子)とは?違いと一覧をわかりやすく解説

    演算子(Operator)とはC言語における演算子とは、1つまたは複数のオブジェクトに対して適用される操作を表すための記号です。主に式の中で意味を持ちますが、宣言の中でも使用されることがあります。一般的には、英数字以外の文字を組み合わせた短い記号列として表現されます。例えば、加算を表す「+」、等価比較を行う「==」、論理ANDを表す「&&」などが演算子に該当します。パンクチュエータ(Punctuator)とはパンクチュエータ(区切り子)とは、要素のリストを区切ったり、構文上の区切りを終了させたりするために使用される記号です。セミコロン「;」やカンマ「,」などが代表的な例です。C言語の演算子・パ

  2. C言語の演算子と式の種類を徹底解説!算術からビット演算まで

    C言語における演算子(オペレーター)とは、データに対して何らかの操作を行うための記号です。C言語の演算子は、その機能によって以下のように分類されます。算術演算子関係演算子論理演算子代入演算子インクリメント・デクリメント演算子ビット演算子条件演算子特殊演算子それぞれの演算子について、具体例とサンプルプログラムを交えながら詳しく見ていきましょう。1. 算術演算子算術演算子は、足し算や引き算などの数値計算を行うために使われます。演算子説明例a=20, b=10 の場合結果+加算(足し算)a+b20+1030-減算(引き算)a-b20-1010*乗算(掛け算)a*b20*10200/除算(割り算)a/