C# 數組子集:高效處理數組部分
C# 陣列將單一資料類型的元素儲存在連續記憶體中,通常需要在不改變原始資料的情況下處理特定部分。 這在處理大量數組時尤其重要,例如在網路通訊中(例如,從套接字接收一定數量的位元組)。 雖然直接數組切片不像某些語言那樣內置,但 ArraySegment<T>
提供了一種高效的解決方案。
挑戰:
想像一個大位元組數組:
<code class="language-csharp">byte[] foo = new byte[4096];</code>
任務是提取初始的 x
位元組,而不建立重複的陣列或 IEnumerable<byte>
集合。
ArraySegment<T>
解:
C# 沒有使用明確切片,而是利用 ArraySegment<T>
:
<code class="language-csharp">string[] a = { "one", "two", "three", "four", "five" }; var segment = new ArraySegment<string>(a, 1, 2);</code>
ArraySegment<T>
充當輕量級包裝器,引用現有數組的一部分,而無需重複資料。
理解ArraySegment<T>
:
ArraySegment<T>
建構子採用三個參數:
在範例中,segment
指向陣列 a
中的「二」和「三」。
ArraySegment<T>
的優點:
ArraySegment<T>
存取元素比建立新陣列更快。 總結:
ArraySegment<T>
提供了一種在 C# 中處理數組子集的簡化且高效的方法。 它增強了效能並減少了記憶體消耗,非常適合涉及大型數組和網路操作的場景。
以上是C# 如何在不複製資料的情況下有效率地建立數組切片?的詳細內容。更多資訊請關注PHP中文網其他相關文章!