LINQの拡張メソッドを使うことでも、HashSet・SortedSetと同様の集合演算を行うことができます。 それぞれ対応するメソッドは次のとおりです。
演算 | HashSet/SortedSetのメソッド | LINQの拡張メソッド |
---|---|---|
積集合 | IntersectWith | Intersect |
和集合 | UnionWith | Union |
差集合 | ExceptWith | Except |
対象差 | SymmetricExceptWith | - |
以下の例はこれらのメソッドを使ってHashSet・SortedSetと同様の集合演算を行う例です。 LINQでは、SymmetricExceptWithに相当するような対象差を求めるメソッドは直接提供されませんが、以下の例のように差集合同士の和集合を求めることで対象差を求めることができます。
LINQの拡張メソッドを使って配列同士の積集合・和集合・差集合・対象差を求める
Imports System
Imports System.Collections.Generic
Imports System.Linq
Class Sample
Shared Sub Main()
Dim set1() As Integer = New Integer() {6, 2, 0, 4, 8}
Dim set2() As Integer = New Integer() {3, 1, 2, 0, 4}
' 積集合を求める
Console.WriteLine(String.Join(", ", set1.Intersect(set2)))
' 和集合を求める
Console.WriteLine(String.Join(", ", set1.Union(set2)))
' 差集合を求める
Console.WriteLine(String.Join(", ", set1.Except(set2)))
' 対象差を求める
Dim diffset1 As IEnumerable(Of Integer) = set1.Except(set2)
Dim diffset2 As IEnumerable(Of Integer) = set2.Except(set1)
Console.WriteLine(String.Join(", ", diffset1.Union(diffset2)))
End Sub
End Class
実行結果
2, 0, 4, 6, 2, 0, 4, 8, 3, 1, 6, 8, 6, 8, 3, 1,