gpt4 book ai didi

.net - 从 VB.NET 中的 List(Of T) 中删除重复项

转载 作者:行者123 更新时间:2023-12-04 02:23:58 28 4
gpt4 key购买 nike

我无法从列表中删除重复项。我做错了什么?

Dim Contacts As New List(Of Person)

...

' remove duplicates '
Contacts = Contacts.Distinct(New PersonEqualityComparer).ToList

我的平等比较器:

Public Class PersonEqualityComparer
Implements IEqualityComparer(Of Person)
Public Function Equals1(ByVal x As Person, ByVal y As Person) As Boolean Implements System.Collections.Generic.IEqualityComparer(Of Person).Equals
Return String.Equals(x.EmailAddress, y.EmailAddress, StringComparison.CurrentCultureIgnoreCase) AndAlso _
String.Equals(x.GivenName, y.GivenName, StringComparison.CurrentCultureIgnoreCase) AndAlso _
String.Equals(x.Surname, y.Surname, StringComparison.CurrentCultureIgnoreCase)
End Function
Public Function GetHashCode1(ByVal obj As Person) As Integer Implements System.Collections.Generic.IEqualityComparer(Of Person).GetHashCode
Return obj.GetHashCode
End Function
End Class

最佳答案

您需要实现 GetHashCode1 以便任意两个相等的对象具有相同的哈希码。

如果许多不相等的对象具有相同的哈希码,它的执行速度会慢得多,尤其是对于大型列表。换句话说,不要将其更改为 Return 0

在您的情况下,最简单的实现是这样的:

Return StringComparer.CurrentCultureIgnoreCase.GetHashCode(obj.EmailAddress) _
Xor StringComparer.CurrentCultureIgnoreCase.GetHashCode(obj.GivenName) _
Xor StringComparer.CurrentCultureIgnoreCase.GetHashCode(obj.Surname)

如果您想要更强大的实现,请参阅 this answer .

关于.net - 从 VB.NET 中的 List(Of T) 中删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2322200/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com