【问题标题】:Comparing two lists(of Integer) for equality比较两个列表(整数)是否相等
【发布时间】:2012-10-25 18:48:36
【问题描述】:

我知道这个非常相似的问题已经被问过很多次了,比如Comparing two collections for equality irrespective of the order of items in them,但我正在尝试使用我正在阅读的解决方案,但有些东西不起作用......这必须是我犯了一个愚蠢的错误......请帮忙!

好的,这是我的场景,假设我在代码中创建了以下 3 个列表:

Dim lst1 as new list(of integer)
Dim lst2 as new list(of integer)
Dim lst3 as new list(of integer)

然后,在代码中,我最终得到了列表中的以下值:

lst1:    lst2:    lst3:
1        1        2
2        2        3
3        3        4
4        4        5

所以,很明显,lst1 和 lst2 相等,而 lst1 和 lst3 不相等,但是我可以在 if 语句中写入什么代码来验证这一点?

我试过了:

lst1.SequenceEqual(lstXX)

对于 lst2 和 lst3 返回 True 我试过了:

lst1.Equals(lstXX)

这对于 lst2 和 lst3 都返回 False

现在,我知道我可以通过比较计数和 lst1.Except(lstXX) 的代码来做到这一点,但我想知道更多,所以我在这里做错了什么,更重要的是,最有效的方法是什么这个??

谢谢!!!

【问题讨论】:

  • 请使用SequenceEqual 显示您的代码 - 它应该做正确的事情。我怀疑你误诊了。
  • 我的代码就是这么简单: - If PathToStartDateForLinking(i).SequenceEqual(PathToStartDateForLinking(j)) Then 其中两个被检查的都是列表(整数)如问题中所述...
  • lst1.SequenceEqual(lst3) 永远不会返回 true。检查您的代码。
  • 更具体地说,我将 PathToStartDateForLinking 作为 List(Of list(of Integer))
  • 请展示一个简短但完整的程序,其中包含您在此处显示的列表,以便 lst1.SequenceEqual(lst3) 返回 true。

标签: c# .net vb.net linq


【解决方案1】:

假设您希望订购很重要,SequenceEqual 正是您想要的 - 在您提供的示例中,lst1.SequenceEqual(lst3) 返回 false。这是一个简短但完整的程序来演示:

using System;
using System.Collections.Generic;
using System.Linq;

class Test
{
    static void Main(string[] args)
    {
        var lst1 = new List<int> { 1, 2, 3, 4 };
        var lst2 = new List<int> { 1, 2, 3, 4 };
        var lst3 = new List<int> { 2, 3, 4, 5 };

        Console.WriteLine(lst1.SequenceEqual(lst2)); // True
        Console.WriteLine(lst1.SequenceEqual(lst3)); // False
    }
}

【讨论】:

    【解决方案2】:
    class Program
    {
        static void Main(string[] args)
        {
            var list1 = new List<int>() { 1, 2, 3, 4 };
            var list2 = new List<int>() { 1, 2, 3, 4 };
            var list3 = new List<int>() { 2, 3, 3, 4 };
    
            Console.WriteLine(list1.SequenceEqual(list2)); // True
            Console.WriteLine(list1.SequenceEqual(list3)); // False
            Console.ReadLine();
        }
    }
    

    按预期工作。一定是别的东西。

    确定您的ij 是您认为的那样吗?

    确定您的列表按照您在问题中所写的顺序排列吗?如果它们的排序不正确,SequenceEqual 将返回 False

    【讨论】:

      猜你喜欢
      • 2016-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-18
      • 2015-10-26
      • 2021-09-14
      • 2023-03-11
      • 2010-12-05
      相关资源
      最近更新 更多