SORU
4 EYLÜL 2008, PERŞEMBE


İki bayt dizi karşılaştırılması .NET

Nasıl bu kadar hızlı yapabilirim?

Elbette bunu yapabilirim:

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;
}

Ama BCL bir işlevi, ya da bunu yapmak için son derece optimize edilmiş bazı kanıtlanmış yolu da arıyorum.

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

güzel çalışıyor ama 64 için çalışacak gibi görünmüyor.

Süper-hızlı yanıt here not.

CEVAP
4 EYLÜL 2008, PERŞEMBE


Enumerable.SequenceEqual yöntemi kullanabilirsiniz.

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

Eğer kullanabilirsiniz .Nedense NET 3.5, yöntem TAMAM.< / ^ br . Derleyici\çevre performansı hakkında endişelenmenize gerek yok bu yüzden döngü optimize çalıştırma.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • LatinNinja99

    LatinNinja99

    28 EKİM 2011
  • MagmaRhino

    MagmaRhino

    16 Temmuz 2011
  • Monica Catral

    Monica Catra

    12 NİSAN 2009