在Java中,arrays .equals()允许轻松地比较两个基本数组的内容(重载可用于所有基本类型)。
c#中有这样的东西吗?在c#中是否存在比较两个数组内容的“神奇”方法?
在Java中,arrays .equals()允许轻松地比较两个基本数组的内容(重载可用于所有基本类型)。
c#中有这样的东西吗?在c#中是否存在比较两个数组内容的“神奇”方法?
当前回答
Elementwise比较?是什么
public void Linq78a()
{
int[] numbers1 = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
bool bb = numbers.Zip(numbers1, (a, b) => (a == b)).Any(p => !p);
if (!bb) Console.WriteLine("Lists are equal (bb)");
else Console.WriteLine("Lists are not equal (bb)");
}
将(a==b)条件替换为您想在a和b中进行比较的任何内容。
(这结合了来自MSDN开发者Linq的两个例子)
其他回答
Elementwise比较?是什么
public void Linq78a()
{
int[] numbers1 = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
bool bb = numbers.Zip(numbers1, (a, b) => (a == b)).Any(p => !p);
if (!bb) Console.WriteLine("Lists are equal (bb)");
else Console.WriteLine("Lists are not equal (bb)");
}
将(a==b)条件替换为您想在a和b中进行比较的任何内容。
(这结合了来自MSDN开发者Linq的两个例子)
你可以使用Enumerable.SequenceEqual。这适用于任何IEnumerable<T>,而不仅仅是数组。
SequenceEqual只在满足两个条件时才返回true。
它们包含相同的元素。 元素的顺序是一样的。
如果您只想检查它们是否包含相同的元素,而不管它们的顺序如何,那么您的问题属于
values2是否包含values1中包含的所有值?
可以使用LINQ扩展方法Enumerable。Except,然后检查结果是否有任何值。这里有一个例子
int[] values1 = { 1, 2, 3, 4 };
int[] values2 = { 1, 2, 5 };
var result = values1.Except(values2);
if(result.Count()==0)
{
//They are the same
}
else
{
//They are different
}
通过这个你也可以自动得到不同的项目。一石二鸟。
请记住,如果像这样执行代码
var result = values2.Except(values1);
你会得到不同的结果。
在我的例子中,我有一个数组的本地副本,想要检查是否有任何东西已经从原始数组中删除,所以我使用这个方法。
对于单元测试,可以使用CollectionAssert。AreEqual而不是assert。AreEqual。
这可能是最简单的方法。
也可以使用array1.ToList()。All(x => array2.Contains(x))如果您需要比较顺序不相同的数组