Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menghiris Array dalam C#?

Bagaimanakah Saya Boleh Menghiris Array dalam C#?

Linda Hamilton
Linda Hamiltonasal
2025-01-14 20:15:48421semak imbas

How Can I Slice an Array in C#?

Penghirisan tatasusunan dalam C#

C# tidak seperti Perl boleh terus menggunakan sintaks @bar = @foo[0..40]; untuk menghiris tatasusunan. Walau bagaimanapun, terdapat beberapa alternatif untuk mencapai fungsi yang sama.

ArraySegmen

Untuk pilihan ringan yang mengelakkan penyalinan tatasusunan asal, pertimbangkan untuk menggunakan ArraySegment<T>. Ia mewakili bahagian bersebelahan tatasusunan tanpa menyalin elemen asas:

<code class="language-csharp">byte[] foo = new byte[4096];
var segment = new ArraySegment<byte>(foo, 0, 41);</code>

segment kini mengandungi 41 bait pertama tatasusunan foo asal. Anda boleh mengakses kandungannya melalui atribut Array dan Offset, atau menggunakannya terus dalam ungkapan LINQ.

LINQ Langkau dan Ambil

Jika anda lebih suka LINQ, anda boleh menggunakan kaedah Skip dan Take untuk melaksanakan penghirisan:

<code class="language-csharp">IEnumerable<byte> slice = foo.Skip(0).Take(41);</code>

slice akan mengembalikan 41 bait pertama tatasusunan foo sebagai urutan IEnumerable<byte>.

Fungsi menghiris tatasusunan tersuai

Jika ArraySegment mahupun LINQ tidak memenuhi keperluan anda, anda boleh mencipta fungsi menghiris tatasusunan tersuai menggunakan julat indeks:

<code class="language-csharp">byte[] Slice(byte[] array, int startIndex, int length)
{
    byte[] slice = new byte[length];
    Array.Copy(array, startIndex, slice, 0, length);
    return slice;
}

byte[] slice = Slice(foo, 0, 41);</code>

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghiris Array dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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