c# - 比较 .NET 中的两个字节数组

标签 c# .net arrays performance j#

我怎样才能快速做到这一点?

我当然可以做到:

static bool ByteArrayCompare(byte[] a1, byte[] a2)
{
    if (a1.Length != a2.Length)
        return false;

    for (int i=0; i<a1.Length; i++)
        if (a1[i]!=a2[i])
            return false;

    return true;
}

但我正在寻找 BCL功能或一些高度优化的行之有效的方法来做到这一点。

java.util.Arrays.equals((sbyte[])(Array)a1, (sbyte[])(Array)a2);

工作得很好,但它看起来不适用于 x64。

注意我超快的回答here .

最佳答案

您可以使用 Enumerable.SequenceEqual方法。

using System;
using System.Linq;
...
var a1 = new int[] { 1, 2, 3};
var a2 = new int[] { 1, 2, 3};
var a3 = new int[] { 1, 2, 4};
var x = a1.SequenceEqual(a2); // true
var y = a1.SequenceEqual(a3); // false

如果你因为某些原因不能使用.NET 3.5,你的方法是可以的。
编译器\运行时环境将优化您的循环,因此您无需担心性能。

关于c# - 比较 .NET 中的两个字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43289/

相关文章:

c# - 反序列化

c# - 自定义 json contractresolver .net web api 在某些情况下回落到 camelcase

c# - Winforms 文本框的焦点丢失事件?

c++ - 如何测试数组元素是否定义(其中元素可以定义为 0)?

c# - 如何最小化并发数据库连接数?

c# - 将文件复制到 metro-style-app 的安装目录

c# - 我将如何在 C# 中访问此任务 <String> 返回值?

.net - HttpListener - 如何将 WebException HTTP 304 "Not Modified"错误发送回浏览器?

javascript - 基于对象属性对数组进行排序 - Javascript

php - 数组 : What is the "s:" value in syntax based on?