我有两个 float[]
对象。在不编写 for 循环的情况下,我想比较我的两个一维数组,看看它们在数值上是否相等。
当我运行以下代码时(因为所有元素都相等),它不会通过 if 语句并显示消息。
我应该如何应用等于命令才能正常工作?
有没有我可以使用的比较命令?
Random r1 = new Random(1);
int rndNumber= r1.Next(10);
float[] m = Enumerable.Repeat((float)rndNumber, 180).ToArray();
float[] m2 = Enumerable.Repeat((float)rndNumber, 180).ToArray();
if (m.Equals(m2))
{
MessageBox.Show("we are equal");
}
最佳答案
Array
的 Equal
方法没有被默认的 object
实现覆盖,它只是比较对象的引用(它们不是t 等于)。
您想比较序列中每个元素的值,并确保它在相同的顺序中具有相同的内容。为此,请在 System.Linq.Enumerable
中使用 SequenceEqual
。
if(m.SequenceEqual(m2)) {...}
在内部,该方法将遍历每个序列的每个元素,并对每个元素对调用 Equals
以验证它们是否相同。虽然这肯定比 for 循环更更容易(并且可以说更具可读性),但请记住,它的性能并不比使用 for
循环好,它只是隐藏来自你的循环。
关于c# - 使用 object.Equals 比较两个 float[] 数组元素是否相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13388271/