Heim >Backend-Entwicklung >C++ >Wie kann man einen Bereich von Array-Elementen in C# effizient klonen?
Fähigkeiten zum Klonen von C#-Array-Elementbereichen
Bei der Programmentwicklung ist es oft notwendig, einige Elemente eines Arrays zu bedienen. Eine effiziente Möglichkeit besteht darin, ein neues Array zu erstellen, das nur die erforderlichen Elemente enthält. In C# kann dies durch Erweiterungsmethoden erreicht werden.
Erweiterungsmethode zum Erstellen eines Subarrays
Um ein Subarray zu erstellen, das einen bestimmten Bereich von Elementen enthält, können Sie die folgende Erweiterungsmethode definieren:
<code class="language-csharp">public static T[] SubArray<T>(this T[] data, int index, int length) { T[] result = new T[length]; Array.Copy(data, index, result, 0, length); return result; }</code>
Diese Methode empfängt das ursprüngliche Array, den Index des ersten enthaltenen Elements und die Länge des neuen Arrays. Es gibt ein neues Array zurück, das eine angegebene Teilmenge von Elementen enthält.
Nutzungsbeispiele
Betrachten Sie das folgende Beispiel:
<code class="language-csharp">int[] data = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; // 创建一个包含索引3到索引7的元素的子数组 int[] subarray = data.SubArray(3, 5); // 注意长度为5,包含索引3,4,5,6,7 // 输出子数组 Console.WriteLine(string.Join(" ", subarray));</code>
Ausgabe:
<code>3 4 5 6 7</code>
Deep Clone
Wenn Sie einen tiefen Klon benötigen (d. h. ein neues Array, bei dem die Elemente selbst Klone und keine Referenzen sind), können Sie eine ausgefeiltere Technik mit Serialisierung und Deserialisierung verwenden. Hier ist eine aktualisierte Erweiterungsmethode für Deep Cloning:
<code class="language-csharp">public static T[] SubArrayDeepClone<T>(this T[] data, int index, int length) { T[] arrCopy = new T[length]; Array.Copy(data, index, arrCopy, 0, length); using (MemoryStream ms = new MemoryStream()) { var bf = new BinaryFormatter(); bf.Serialize(ms, arrCopy); ms.Position = 0; return (T[])bf.Deserialize(ms); } }</code>
Diese Methode erstellt zunächst ein neues Array, kopiert den angegebenen Bereich von Elementen aus dem ursprünglichen Array hinein und erstellt dann mithilfe der Serialisierung einen tiefen Klon der Objekte im Subarray. Beachten Sie, dass die Objekte im ursprünglichen Array serialisierbar sein müssen. BinaryFormatter
wurde als veraltet markiert und es wird empfohlen, modernere Serialisierungsmethoden wie System.Text.Json
zu verwenden. Dieses Beispiel dient nur dem Verständnis des Prinzips und sollte in tatsächlichen Anwendungen durch eine sicherere Serialisierungsmethode ersetzt werden.
Das obige ist der detaillierte Inhalt vonWie kann man einen Bereich von Array-Elementen in C# effizient klonen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!