【发布时间】:2014-08-29 08:55:52
【问题描述】:
我很确定这是重复的,但我已经尝试了所有方法,但我似乎仍然无法获得差异。我有两个字符串列表:listA 和 listB。我正在尝试在 listA 中查找不在 B 中的项目。
示例: 列表A:“1”、“2”、“4”、“7” 列表B:“2”,“4” 我想要的输出是:“1”,“7”
这是我尝试过的 for 循环和 lambda 表达式,但这些都需要很长时间:
//these two approaches take too long for huge lists
foreach (var item in listA)
{
if (!listB.Contains(item))
diff.Add(id);
}
diff = listA.Where(id => !listB.Contains(id)).ToList();
//these don't give me the right differences
listA.Except(listB).ToList();
var set = new HashSet<string>(listA);
set.SymmetricExceptWith(listB);
【问题讨论】:
-
你想如何管理同一个列表中的重复项? (想象 listA 或 listB 有 1、1、1、2、4、7、4、3)?
-
你能假设列表是排序的吗?它们是一组还是有碰撞?另外:如果一个列表足够大,您可以对此类列表进行分区以并行计算。
-
它们没有排序,重复的可以丢弃。只需要明显的差异。不过不应该有任何重复——我们可以在我的情况下做出这样的假设。
-
var diff=listA.Except(listB).ToList(); -
listA.Except(listB).ToList()按预期工作。重现问题的邮政编码。
标签: c# .net string linq lambda