我有两个值几乎相同的列表。我想从第二个列表中删除具有相同用户名的每一行。
ListA ListB
Col1 Col2 Col3 Col1 Col2 Col3
1222 User1 2018 1111 User1 2019
1234 User2 2018 1456 User10 2018
2333 User3 2018 2345 User5 2018
我尝试这个:
listA = listB.Except(listA).toList
我要做的是在listA中删除User1所在的行。但是由于行不完全相同,我尝试的行不起作用。
到目前为止,我仅发现谁从两个列表中删除了完全相同的行。 我仍然在学习编码。我有一个模糊的想法,我需要循环进入两个列表,但是我被卡住了。任何帮助将不胜感激。
谢谢
答案 0 :(得分:0)
您可以按以下方式使用ListViews:
PopupPickerRow
答案 1 :(得分:0)
怎么样?
Public Class Form1
Private ListA As New List(Of Row)
Private ListB As New List(Of Row)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
ListA.Add(New Row(1222, "User1", 2018))
ListA.Add(New Row(1234, "User2", 2018))
ListA.Add(New Row(2333, "User3", 2018))
ListB.Add(New Row(1111, "User1", 2019))
ListB.Add(New Row(1456, "User10", 2018))
ListB.Add(New Row(2345, "User5", 2018))
ListB.ForEach(Function(b) ListA.RemoveAll(Function(a) a.Col2 = b.Col2))
' If you want to use a for each loop.
'For Each b As Row In ListB
' For Each a As Row In ListA.ToArray
' If a.Col2 = b.Col2 Then
' ListA.Remove(a)
' End If
' Next
'Next
End Sub
End Class
Class Row
Property Col1 As Integer
Property Col2 As String
Property Col3 As Integer
Public Sub New(value1 As Integer, value2 As String, value3 As Integer)
Col1 = value1
Col2 = value2
Col3 = value3
End Sub
End Class
答案 2 :(得分:0)
您可能正在寻找使用IEqualityComparer
Except(IEnumerable, IEnumerable, IEqualityComparer)的方法
简短的答案是
listA = listB.Except(listA, New MyComparer).toList
说明
我们有一个包含在列表中的类
Private Class TestClass
Property Prop1 As String
Property Prop2 As String
End Class
我们有两个列表
Dim listA As New Generic.List(Of TestClass)
Dim listB As New Generic.List(Of TestClass)
我们希望值几乎相同,例如Prop1
相等而Prop2
无关紧要。所以我们定义一个比较器
Private Class MyComparer
Implements Generic.IEqualityComparer(Of TestClass)
Public Function Equals1(x As TestClass, y As TestClass) As Boolean Implements IEqualityComparer(Of TestClass).Equals
Return x.Prop1 = y.Prop1
End Function
Public Function GetHashCode1(obj As TestClass) As Integer Implements IEqualityComparer(Of TestClass).GetHashCode
Return obj.Prop1.GetHashCode
End Function
End Class
并使用比较器
Dim res = listB.Except(listA, New MyComparer)
注意
您必须注意哈希码。相等的对象必须始终具有相同的哈希。 当哈希不同的对象相同时,代码可以工作,但速度较慢。