c# - 使用 object.Equals 比较两个 float[] 数组元素是否相等

标签 c# .net c#-4.0

我有两个 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");
   }

最佳答案

ArrayEqual 方法没有被默认的 object 实现覆盖,它只是比较对象的引用(它们不是t 等于)。

您想比较序列中每个元素的值,并确保它在相同的顺序中具有相同的内容。为此,请在 System.Linq.Enumerable 中使用 SequenceEqual

if(m.SequenceEqual(m2)) {...}

在内部,该方法将遍历每个序列的每个元素,并对每个元素对调用 Equals 以验证它们是否相同。虽然这肯定比 for 循环更更容易(并且可以说更具可读性),但请记住,它的性能并不比使用 for 循环好,它只是隐藏来自你的循环。

关于c# - 使用 object.Equals 比较两个 float[] 数组元素是否相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13388271/

相关文章:

c# - 在 web.config 之外存储配置设置的最佳方式

c# - 我可以使用 async 和 Task.Run 使复杂的方法异步吗?

.net - 何时使用 Parallel.For?

.net - 突破编程.NET时代

c#-4.0 - Outlook内存不足异常

c#-4.0 - Task.WaitAll() 不锁定主 UI

javascript - 有没有办法在其他功能之前执行更新面板的更新

c# - 处理 MS Word 文件中的文本的最简单方法

c# - 在 .net core 2.0 中缓存声明

c# - 如何禁用 ContextMenuStrip 中的菜单项?