我知道这个非常类似的问题已经被问过很多次,比如在Comparing two collections for equality irrespective of the order of items in them,但是我正在尝试使用我正在那里阅读的解决方案而且有些东西不起作用......这个HAS我正在制造一个愚蠢的错误......请帮助!!
好的,所以,这是我的方案,假设我在代码中创建了以下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现在,我知道我可以使用代码比较count和lst1.Except(lstXX),但我想知道更多我在这里做错了什么,更重要的是,什么是最有效的方法此??
感谢!!!
答案 0 :(得分:17)
假设您希望排序很重要,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
}
}
答案 1 :(得分:1)
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();
}
}
按预期工作。必须是别的东西。
您某些您的i
和j
是您认为的吗?
您某些是否已按照您在问题中撰写的方式订购了您的列表?如果没有正确排序,SequenceEqual
将返回错误。