【问题标题】:Comparing items in 2 lists in c#在c#中比较2个列表中的项目
【发布时间】:2018-01-04 22:35:54
【问题描述】:

我目前正在处理 2 个列表。我需要将列表中的项目相互比较,但我不想将每个项目与其他每个项目进行比较,只比较相应列表中位于相同索引位置的项目。

所以它可能看起来像:

List1.item1 == List2.item1
List1.item2 == List2.item2
List1.item3 == List2.item3

并为每个返回 true 或 false。我打算使用一个 foreach 循环,但我不知道如何同时遍历两个列表,并在此过程中进行比较。我现在没有任何代码可以分享,因为我不知道从哪里开始。可以使用任何帮助来查找资源或代码示例。

谢谢

【问题讨论】:

  • 为什么不通过索引迭代它们呢?有什么担心吗?
  • 一个简单的for循环索引列表?

标签: c# list compare iteration


【解决方案1】:

使用Zip 扩展方法。

var result = firstList.Zip(secondList, (a, b) => a == b);

【讨论】:

  • 完美。谢谢!
【解决方案2】:
for (int i = 0; i < List1.Count; i++) //iterate over each possible index
{
    if (List1[i] == List2[i])
    {
        //do something
    }
}

你应该处理 List1List2 没有相同数量的项目的情况,例如:i &lt; Math.Min(List1.Count, List2.Count),所以不要在某些列表上超出边界。

【讨论】:

  • LINQ 的 Zip 方法处理合并,直到它到达序列之一的末尾。但是您的实现是对 OP 的最佳答案。
  • 我没有尝试这种方式,但我理解这个想法。在我的情况下,它们永远不会有不同的长度,但我可以理解你为什么要这样做以解决突发事件。谢谢!
【解决方案3】:

另一种选择,您可以使用 except 扩展名。

var difference = collection.Except(samples).ToList();

类似于 zip,但返回列表之间的差异。不确定这是否适用于您的场景,但效果很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多