Linq-set-operations

提供:Dev Guides
移動先:案内検索

LINQでの操作の設定

集合演算には4つの演算子があり、それぞれ異なる基準に基づいて結果を生成します。

Operator Description C# Query Expression Syntax VB Query Expression Syntax
Distinct Results a list of unique values from a collection by filtering duplicate data if any Not Applicable Distinct
Except Compares the values of two collections and return the ones from one collection who are not in the other collection Not Applicable Not Applicable
Intersect Returns the set of values found t be identical in two separate collections Not Applicable Not Applicable
Union Combines content of two different collections into a single list that too without any duplicate content Not Applicable Not Applicable

個別の例-クエリ式

VB

Module Module1

   Sub Main()

      Dim classGrades = New System.Collections.Generic.List(Of Integer) From {63, 68, 71, 75, 68, 92, 75}

      Dim distinctQuery = From grade In classGrades
                          Select grade Distinct

      Dim sb As New System.Text.StringBuilder("The distinct grades are: ")

      For Each number As Integer In distinctQuery
         sb.Append(number & " ")
      Next

      MsgBox(sb.ToString())

   End Sub

End Module

上記のコードをコンパイルして実行すると、次の結果が生成されます-

The distinct grades are: 63 68 71 75 92

Exceptの例-Enumerable.Exceptメソッド

C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Operators {
   class Program {
      static void Main(string[] args) {

         double[] numbers1 = { 2.0, 2.1, 2.2, 2.3, 2.4, 2.5 };
         double[] numbers2 = { 2.2 };

         IEnumerable<double> onlyInFirstSet = numbers1.Except(numbers2);

         foreach (double number in onlyInFirstSet)
            Console.WriteLine(number);
            Console.ReadLine();
      }
   }
}

VB

Module Module1

   Sub Main()

      Dim numbers1() As Double = {2.0, 2.1, 2.2, 2.3, 2.4, 2.5}
      Dim numbers2() As Double = {2.2}

      Dim onlyInFirstSet As IEnumerable(Of Double) = numbers1.Except(numbers2)

      Dim output As New System.Text.StringBuilder

      For Each number As Double In onlyInFirstSet
         output.AppendLine(number)
         Console.WriteLine(number)
      Next

      Console.ReadLine()

   End Sub

End Module

上記のC#またはVBのコードをコンパイルして実行すると、次の結果が生成されます-

2
2.1
2.3
2.4
2.5

Intersectの例-Enumerable.Intersectメソッド

C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Operators {
   class Program {
      static void Main(string[] args) {

         int[] id1 = { 44, 26, 92, 30, 71, 38 };
         int[] id2 = { 39, 59, 83, 47, 26, 4, 30 };

         IEnumerable<int> both = id1.Intersect(id2);

         foreach (int id in both)
            Console.WriteLine(id);
            Console.ReadLine();
      }
   }
}

VB

Module Module1

   Sub Main()

      Dim id1() As Integer = {44, 26, 92, 30, 71, 38}
      Dim id2() As Integer = {39, 59, 83, 47, 26, 4, 30}

      Dim intersection As IEnumerable(Of Integer) = id1.Intersect(id2)

      Dim output As New System.Text.StringBuilder

      For Each id As Integer In intersection
         output.AppendLine(id)
         Console.WriteLine(id)
      Next

      Console.ReadLine()

   End Sub

End Module

上記のC#またはVBのコードをコンパイルして実行すると、次の結果が生成されます-

26
30

Unionの例-Enumerable.Unionメソッド

C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Operators {
   class Program {
      static void Main(string[] args) {

         int[] ints1 = { 5, 3, 9, 7, 5, 9, 3, 7 };
         int[] ints2 = { 8, 3, 6, 4, 4, 9, 1, 0 };

         IEnumerable<int> union = ints1.Union(ints2);

         foreach (int num in union) {
            Console.Write("{0} ", num);
            Console.Write("\n");
         }

         Console.ReadLine();
      }
   }
}

VB

Module Module1

   Sub Main()

      Dim ints1() As Integer = {5, 3, 9, 7, 5, 9, 3, 7}
      Dim ints2() As Integer = {8, 3, 6, 4, 4, 9, 1, 0}

      Dim union As IEnumerable(Of Integer) = ints1.Union(ints2)

      Dim output As New System.Text.StringBuilder

      For Each num As Integer In union
         output.AppendLine(num & " ")
         Console.WriteLine(num & " ")
      Next

      Console.ReadLine()

   End Sub

End Module

上記のC#またはVBのコードをコンパイルして実行すると、次の結果が生成されます-

5
3
9
7
8
6
4
1
0