Heim >Backend-Entwicklung >C++ >Wie kann man einen Bereich von Array-Elementen in C# effizient klonen?

Wie kann man einen Bereich von Array-Elementen in C# effizient klonen?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-18 20:25:10472Durchsuche

How to Efficiently Clone a Range of Array Elements in C#?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn