让我们说有
List<string> a1 = new List<string>();
List<string> a2 = new List<string>();
Run Code Online (Sandbox Code Playgroud)
有没有办法这样做?
if (a1 == a2)
{
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*ers 131
如果要检查列表中的元素是否相同且顺序相同,可以使用SequenceEqual
:
if (a1.SequenceEqual(a2))
Run Code Online (Sandbox Code Playgroud)
看到它在线工作:ideone
Tim*_*ter 14
您还可以使用Except(生成两个序列的集合差异)来检查是否存在差异:
IEnumerable<string> difference = a1.Except(a2);
if(!difference.Any()){}
Run Code Online (Sandbox Code Playgroud)
JYe*_*ton 11
我发现这SequenceEqual
不是比较两个字符串列表的最有效方法(最初来自http://www.dotnetperls.com/sequenceequal).
我想自己测试一下,所以我创建了两个方法:
/// <summary>
/// Compares two string lists using LINQ's SequenceEqual.
/// </summary>
public bool CompareLists1(List<string> list1, List<string> list2)
{
return list1.SequenceEqual(list2);
}
/// <summary>
/// Compares two string lists using a loop.
/// </summary>
public bool CompareLists2(List<string> list1, List<string> list2)
{
if (list1.Count != list2.Count)
return false;
for (int i = 0; i < list1.Count; i++)
{
if (list1[i] != list2[i])
return false;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
第二种方法是我遇到的一些代码,并想知道它是否可以重构为"更容易阅读".(并且还想知道LINQ优化是否会更快.)
事实证明,有两个包含32k字符串的列表,超过100个执行:
为了简洁,性能和代码可读性,我通常更喜欢LINQ; 但在这种情况下,我认为基于循环的方法是首选.
编辑:
我使用优化代码重新编译,并运行测试1000次迭代.结果仍然有利于循环(更是如此):
使用Visual Studio 2010,Core i7-920上的C#.NET 4 Client Profile进行测试
归档时间: |
|
查看次数: |
87156 次 |
最近记录: |