C# 从 List<List<int>> 中删除重复项

标签 c# list duplicates removeall

我无法想出最有效的算法来从 List<List<int>> 中删除重复项,例如(我知道这看起来像 int[] 的列表,但只是出于视觉目的这样做:

my_list[0]= {1, 2, 3};
my_list[1]= {1, 2, 3};
my_list[2]= {9, 10, 11};
my_list[3]= {1, 2, 3};

所以输出就是

new_list[0]= {1, 2, 3};
new_list[1]= {9, 10, 11};

如果您有任何想法,请告诉我。我真的很感激。

最佳答案

构建自定义 EqualityComparer<List<int>> :

public class CusComparer : IEqualityComparer<List<int>>
{
    public bool Equals(List<int> x, List<int> y)
    {
        return x.SequenceEqual(y);
    }

    public int GetHashCode(List<int> obj)
    {
        int hashCode = 0;

        for (var index = 0; index < obj.Count; index++)
        {
            hashCode ^= new {Index = index, Item = obj[index]}.GetHashCode();
        }

        return hashCode;
    }
}

然后你可以用Distinct得到结果使用自定义比较器方法:

var result = my_list.Distinct(new CusComparer());

编辑:

将索引包含到方法中 GetHashCode确保不同的订单不会相等

关于C# 从 List<List<int>> 中删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12784788/

相关文章:

c# - 从使用当前路由值和模型状态的 Paging UserControl 生成 ActionLink/RouteLink

c# - 如何查看存储在列表中的值?

java - 如何使用java创建.doc文件?

mysql - 使用重复的找到的 ID 更新重复的行

C# 控制台程序问题

c# - 轻松地将 BitConverter.GetBytes 上存在的所有重载用于我自己的方法

c# - C#BackgroundWorker等到结束

python - 没有名为 mem_profile 的模块

python - 使用python映射到整数后如何防止前导零

PostgreSQL 删除没有 id 或 unique_key 的重复项