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