Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Cari Semua Kejadian Corak Tatasusunan Byte dengan Cekap dalam Satu Lagi dalam C#?

Bagaimanakah Saya Boleh Cari Semua Kejadian Corak Tatasusunan Byte dengan Cekap dalam Satu Lagi dalam C#?

Patricia Arquette
Lepaskan: 2025-01-20 18:01:13
asal
212 orang telah melayarinya

Cekap mencari semua kemunculan corak tatasusunan bait dalam tatasusunan bait lain dalam C#

Soalan:

Memandangkan dua tatasusunan bait, satu mewakili corak dan satu lagi mengandungi data yang akan dicari, tentukan tempat dalam tatasusunan data corak itu sepadan.

Penyelesaian:

Kod yang disediakan menyediakan penyelesaian yang cekap dan ringkas menggunakan kaedah sambungan Cari:

<code class="language-csharp">public static int[] Locate(this byte[] self, byte[] candidate)
{
    if (IsEmptyLocate(self, candidate))
        return Empty;

    var list = new List<int>();

    for (int i = 0; i < self.Length; i++)
    {
        if (i + candidate.Length > self.Length)
            break;

        bool match = true;
        for (int j = 0; j < candidate.Length; j++)
        {
            if (self[i + j] != candidate[j])
            {
                match = false;
                break;
            }
        }
        if (match)
            list.Add(i);
    }

    return list.ToArray();
}

private static bool IsEmptyLocate(byte[] self, byte[] candidate)
{
    return self == null || self.Length == 0 || candidate == null || candidate.Length == 0 || candidate.Length > self.Length;
}

private static readonly int[] Empty = new int[0];</code>
Salin selepas log masuk

Kaedah Locate berulang melalui tatasusunan data dan menyemak cara setiap kemungkinan kedudukan permulaan sepadan dengan corak. Jika ada perlawanan, rekod kedudukan ke dalam senarai jika tidak, teruskan ke kedudukan seterusnya.

Contoh:

<code class="language-csharp">// 示例字节数组
byte[] pattern = new byte[] { 12, 3, 5, 76, 8, 0, 6, 125 };
byte[] toBeSearched = new byte[] { 23, 36, 43, 76, 125, 56, 34, 234, 12, 3, 5, 76, 8, 0, 6, 125, 234, 56, 211, 122, 22, 4, 7, 89, 76, 64, 12, 3, 5, 76, 8, 0, 6, 125 };

// 定位并打印匹配位置
foreach (var position in toBeSearched.Locate(pattern))
    Console.WriteLine(position);</code>
Salin selepas log masuk

How Can I Efficiently Find All Occurrences of a Byte Array Pattern within Another in C#?

Kod ini mengubah sedikit kod asal untuk memudahkan pemahaman dan menambahkan pengendalian tatasusunan kosong dan kes yang panjang coraknya lebih besar daripada panjang data. IsEmptyLocate Fungsi meningkatkan kebolehbacaan dan kebolehselenggaraan kod.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Cari Semua Kejadian Corak Tatasusunan Byte dengan Cekap dalam Satu Lagi dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan