leo*_*ora 12 c# arrays integer
我想比较2个整数列表是否相等.如果能让它变得更容易,我很乐意提前对它们进行排序.这是我要比较的两件事的例子.对于下面,我希望结果是真的.
注意:列表中永远不会有任何重复项(没有重复值)
List<int> list = new List<int>(){1, 4,6,7};
int[] myArray = new int[]{1, 6,7 ,4};
Run Code Online (Sandbox Code Playgroud)
LBu*_*kin 25
比较列表时,平等对你意味着什么?你是否关心列表完全相同....相同的订单中的相同项目?或者只是包含相同的值集,无论顺序如何.
如果您确实想要验证列表是否以相同的顺序包含相同的值序列,则可以使用SequenceEqual()LINQ中的方法:
bool areEqual = listA.SequenceEqual( listB );
Run Code Online (Sandbox Code Playgroud)
如果列表的顺序不同,您可以先对它们进行排序:
bool areEqual = listA.OrderBy(x=>x).SequenceEqual( listB.OrderBy(x=>x) );
Run Code Online (Sandbox Code Playgroud)
如果列表可以包含重复项,并且重复项无关紧要(关于相等性),则可以使用set comparison:
bool setEqual = new HashSet<int>( listA ).SetEquals( listB );
Run Code Online (Sandbox Code Playgroud)
如果重复无关紧要,并且您有兴趣避免比较的费用(排序,构建哈希集等),您可以先比较两个集合的大小,并仅比较它们是否相同.
看起来你想将它们作为集合进行比较......在这种情况下:
HashSet<int> hashSet = new HashSet<int>(list);
if (hashSet.SetEquals(myArray))
{
...
}
Run Code Online (Sandbox Code Playgroud)
注意,这将使{1,2,2,3}和{1,3,2,3,1}相等.那是你要的吗?
几乎可以肯定的是,内置的东西会做你想要的,但你需要在你的描述中完全准确:)
编辑:正如你所说,没有重复的元素,这应该没问题.然而,记录这个假设可能是明智之举.