ASP.NET List<T> 集合運算 聯集、交集、差集

ASPX (Active Server Pages Extended) 是用於建立動態網頁的 Server 伺服器端技術、且互動高效的網頁伺服器應用程式,當前主要用於 Microsoft 微軟的 ASP.NET 網頁開發平台。在 ASP.NET 中可以使用集合運算 UnionIntersectionDifference 集合關係來對資料進行處理和操作。

集合運算和集合關係

ASPX 集合運算、集合代數中包含的稱為元素,而由元素所組成的又稱 Union, Intersection Operation 集合運算。
Relational Algebra, Gather, Assemble, Collect 運算並集、交集、補集、差集等集合。

常用於兩個 Array 陣列的資料比較、並且取出比較結果,例如合併資料、重複的值等。

Union 聯集

Union 聯集 A 集合和 B 集合間的聯集 A B,所有包含在 A 或 B 的元素所組成的集合。用於合併兩個或多個集合,然後返回包含所有 Unique Value 唯一值的新集合。

Intersection 交集

Intersection 交集 A 集合和 B 集合間的交集 A B,所有同時重複包含在 A 和 B 的元素所組成的集合。用於找到兩個或多個集合中共有的元素,並返回包含 Common Elements 共有元素的新集合。

Difference 差集

Difference 差集 B 集合在 A 集合中的差集,是由所有屬於 A 集合但不屬於 B 集合的元素所組成的集合。返回包含這些差異元素的新集合。在 ASP.NET 可以使用 Except 方法來執行兩個集合的差集運算。




Dim Part_A_Tables() As String = {"固定座", "皮帶輪", "傳動軸"}
Dim Part_B_Tables() As String = {"皮帶輪", "濾清器", "傳動軸"}
Dim Part_Charts As New List(Of String)(Part_A_Tables)
Part_Charts.AddRange(Part_B_Tables) '合併陣列

固定座, 皮帶輪, 傳動軸, 皮帶輪, 濾清器, 傳動軸


Union 聯集(且去除重複的值)

Dim Part_Union As New List(Of String)
For Each Item As String In Part_Charts
  If Not Part_Union.Contains(Item) Then
    Part_Union.Add(Item)
  End If
Next Item

固定座, 皮帶輪, 傳動軸, 濾清器


同樣的結果、使用 System.Linq.Enumerable 方法,在列舉查詢「聯集」的集合。

Dim Enum_Union As IEnumerable = Part_A_Tables.Union(Part_B_Tables)
For Each Item As String In Enum_Union
  Response.Write( Item & ", ")
Next Item

固定座, 皮帶輪, 傳動軸, 濾清器



Intersection 交集

Dim Part_Intersection As New List(Of String)
For Each ItemA As String In Part_A_Tables
  For Each ItemB As String In Part_B_Tables
  If (ItemA = ItemB) And (Not Part_Intersection.Contains(ItemA)) Then
    Part_Intersection.Add(ItemA)
  End If
  Next ItemB
Next ItemA

皮帶輪, 傳動軸


同樣的結果、使用 System.Linq.Enumerable 方法,在列舉查詢「交集」的集合。

Dim Enum_Intersection As IEnumerable = Part_A_Tables.Intersect(Part_B_Tables)

皮帶輪, 傳動軸



Difference 差集

Dim Part_Difference As New List(Of String)(Part_A_Tables)
For Each Item As String In Part_B_Tables
  If Part_Difference.Contains(Item) Then
    Part_Difference.Remove(Item)
  End If
Next Item

固定座


使用 Except 產生兩個集合的差異定義為第一個集合的成員,該集合不會出現在第二個集合中。

Dim Enum_Difference1 As IEnumerable = Part_A_Tables.Except(Part_B_Tables)

固定座




反向 Difference 差集

Dim Part_Difference As New List(Of String)(Part_B_Tables)
For Each Item As String In Part_A_Tables
  If Part_Difference.Contains(Item) Then
    Part_Difference.Remove(Item)
  End If
Next Item

濾清器


Dim Enum_Difference2 As IEnumerable = Part_B_Tables.Except(Part_A_Tables)

濾清器




聯集 Union 去除重複的數值

使用 System.Linq.Enumerable 方法的 Distinct() 來比較 List<T> 值,去除重複的數值。

Dim NumberUnion As New List(Of Int16)({100, 200, 500, 100, 200, 500, 50 })
Dim distinctUnion As IEnumerable  = NumberUnion.Distinct()
For Each Item As Int16 In distinctUnion
  Response.Write ( Item & ", " )
Next Item

100, 200, 500, 50