我有一个List(Foo),我想看看它是否等于另一个List(foo)。什么是最快的方式?
答案 0 :(得分:24)
从3.5开始,您可以使用LINQ函数:
List<string> l1 = new List<string> {"Hello", "World","How","Are","You"};
List<string> l2 = new List<string> {"Hello","World","How","Are","You"};
Console.WriteLine(l1.SequenceEqual(l2));
它也知道提供自己的比较器的过载
答案 1 :(得分:13)
以下是我要做的步骤:
以下是该方法的一些建议:
答案 2 :(得分:1)
这样的事情:
public static bool CompareLists(List<int> l1, List<int> l2)
{
if (l1 == l2) return true;
if (l1.Count != l2.Count) return false;
for (int i=0; i<l1.Count; i++)
if (l1[i] != l2[i]) return false;
return true;
}
可能需要进行一些额外的错误检查(例如空检查)。
答案 3 :(得分:0)
这样的事情可能会使用Match Action。
public static CompareList<T>(IList<T> obj1, IList<T> obj2, Action<T,T> match)
{
if (obj1.Count != obj2.Count) return false;
for (int i = 0; i < obj1.Count; i++)
{
if (obj2[i] != null && !match(obj1[i], obj2[i]))
return false;
}
}
答案 4 :(得分:0)
假设您想要知道CONTENTS是否相等(而不仅仅是列表的对象引用。)
如果您要比插入更频繁地进行相等性检查,那么您可能会发现每次插入值时生成哈希码更有效,并在进行相等性检查时比较哈希码。请注意,您应该考虑订单是否重要,或者只是列表中的列表具有相同的内容。
除非你经常比较,否则我认为这通常是一种浪费。
答案 5 :(得分:0)
我没有看到的一个捷径是,如果您知道如何创建列表,您可以将它们连接成字符串并直接进行比较。
例如......
在我的情况下,我想提示用户输入单词列表。我想确保每个单词以字母开头,但在此之后,它可能包含字母,数字或下划线。我特别担心用户会使用短划线或以数字开头。
我使用正则表达式将它分成2个列表,然后将它们连接在一起并将它们作为字符串进行比较:
var testList = userInput.match(/[-|\w]+/g)
/*the above catches common errors:
using dash or starting with a numeric*/
listToUse = userInput.match(/[a-zA-Z]\w*/g)
if (listToUse.join(" ") != testList.join(" ")) {
return "the lists don't match"
因为我知道两个列表都不包含空格,并且列表只包含简单的字符串,所以我可以将它们与空格连接在一起,并进行比较。