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!