C# 中使用 ValueComparer 比较 List<int> 对象
以下代码展示了如何使用 ValueComparer 来比较 List<int> 对象:
new ValueComparer<List<int>>(
(c1, c2) => c1.SequenceEqual(c2),
c => c.Aggregate(0, (a, v) => HashCode.Combine(a, v.GetHashCode())),
c => c.ToList()
)
其中 c => c.Aggregate(0, (a, v) => HashCode.Combine(a, v.GetHashCode())) 这一段用于计算 List<int> 对象的哈希码。它使用 Aggregate 方法,从初始值 0 开始,将列表中的每个元素的哈希码 (v.GetHashCode()) 与当前的哈希码 (a) 使用 HashCode.Combine 方法组合起来,最终得到一个新的哈希码。这个哈希码可以用于比较两个 List<int> 对象是否相等。
ValueComparer 类需要三个参数:
- EqualityComparer: 用于比较两个对象是否相等的函数。这里使用
SequenceEqual来判断两个列表是否包含相同顺序的元素。 - GetHashCode: 用于计算对象哈希码的函数。这里使用
Aggregate和HashCode.Combine来计算列表元素的组合哈希码。 - CreateCopy: 用于创建对象的副本的函数。这里使用
ToList来创建一个新的列表,避免修改原始列表。
通过使用 ValueComparer,你可以方便地比较 List<int> 对象,并确保其正确性。
原文地址: https://www.cveoy.top/t/topic/fVPV 著作权归作者所有。请勿转载和采集!