删除重复比较有效地在 C# 中的两个大型列表吗?

标签: Linq C#
发布时间: 2017/2/28 22:49:40
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有两个大的列表,有 4 列 list1 和 list2 与 3 列。 如果 list1 包含相同的值在列 1 和列 3 list2,然后我需要在 list1 中删除该项目。 实际上,我想要的一些优势和有效的解决方案。 谢谢你的任何帮助。

List1:
1, 5, 3, 9     // Remove this
11, 15, 18, 6  // Keep this  

List2:
1, 5, 3

List<Tuple<int, int, int, int>> list1 = new List<Tuple<int, int, int, int>>();
List<Tuple<int, int, int>> list2 = new List<Tuple<int, int, int>>();

解决方法 1:

好理想的情况是从性能角度来看你将能够利用 HashSet.SymmetricExceptWith ,但你在用两种不同的类型 (和 Tuples 在那)。

Except是一个可能的解决方案︰

list1 = list1.Except(list1
    .Where(l1 => list2
        .Any(l2 => l2.Item1 == l1.Item1
            && l2.Item2 == l1.Item2
            && l2.Item3 == l1.Item3)))
    .ToList();
赞助商