c# - 不同的列表列表,其中列表包含相同的值但顺序不同

标签 c# list distinct

我有一个列表:

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/

相关文章:

python - 将句子的字符串表示形式列表转换为词汇集

mysql - 如何从多个列中检索不同的值?

c# - 获取 Unity 中的预制件文件位置

c# - 从十六进制转换为字符串

python - 给定元组形式的索引列表,遍历列表列表

python 从文件中删除 "many"行

mysql - 从 MYSQL 数据库检索唯一数据

sql-server-2005 - Sql Server 2005 同时使用 count 和 distinct

c# - 如何: Create a Key In the Registry (Visual C#)?

c# - asp.net 重定向到不同于在 navigateURL 中设置的另一个位置