我有一个列表:
var list = new List<List<int>>();
其中可能包含
list[0] = {1, 2, 3, 4}
list[1] = {3, 1, 2, 4}
list[2] = {2, 1, 7, 3}
如何检测 [0] 和 [1] 之间的重复项并删除其中一个?代码是升 c 的。
实际上它不是一个整数,但这不应该改变问题。
最佳答案
您可以编写自己的 IEqualityComparer<List<int>>
实现.对于 GetHashCode()
它只会返回列表中元素的所有哈希码的 XOR。对于 Equals()
它会创建一个新的 HashSet<int>
从第一个列表中,然后调用 HashSet<T>.SetEquals
在上面,传递第二个列表。请注意,这假设没有重复元素。 (否则 { 1, 1, 2 } 将等于 { 1, 2, 2 } 但具有不同的哈希码。)
一旦你做到这一点,你可以使用 Distinct
:
var distinct = list.Distinct(new CustomEqualityComparer());
作为替代方法,您可以使用 HashSet<T>
吗?作为您的收藏类型开始?然后它真的很容易:
var distinct = sets.Distinct(HashSet<int>.CreateSetComparer());
如果您需要列表作为输入但可以处理集合作为输出:
var distinct = list.Select(x => new HashSet<int>(x))
.Distinct(HashSet<int>.CreateSetComparer());
关于c# - 不同的列表列表,其中列表包含相同的值但顺序不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4517848/