C#中的陣列切片
C#不像Perl可以直接使用@bar = @foo[0..40];
的語法來切片陣列。但是,有一些替代方法可以實現類似的功能。
ArraySegment
對於一個輕量級的選項,它避免了複製原始數組,可以考慮使用ArraySegment<T>
。它表示數組的連續部分,而不會複製底層元素:
<code class="language-csharp">byte[] foo = new byte[4096]; var segment = new ArraySegment<byte>(foo, 0, 41);</code>
segment
現在包含原始foo
陣列的前41個位元組。您可以透過Array
和Offset
屬性存取其內容,或直接在LINQ表達式中使用它。
LINQ Skip和Take
如果您更喜歡LINQ,您可以使用Skip
和Take
方法來實現切片:
<code class="language-csharp">IEnumerable<byte> slice = foo.Skip(0).Take(41);</code>
slice
將把foo
陣列的前41個位元組當作一個IEnumerable<byte>
序列傳回。
自訂陣列切片函數
如果ArraySegment
和LINQ都無法滿足您的需求,您可以使用索引範圍建立自訂陣列切片函數:
<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>
以上是如何在 C# 中對陣列進行切片?的詳細內容。更多資訊請關注PHP中文網其他相關文章!