Heim >Backend-Entwicklung >Golang >Wie geht die Kopierfunktion von Go mit überlappenden Slices um?

Wie geht die Kopierfunktion von Go mit überlappenden Slices um?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-29 07:33:30717Durchsuche

How does Go's copy function handle overlapping slices?

Die Kopierfunktion in Go verstehen

Die Kopierfunktion in Go ist, wie dokumentiert, eine integrierte Funktion, die das Kopieren von erleichtert Elemente von einem Quell-Slice zu einem Ziel-Slice. Es arbeitet mit Slices desselben Elementtyps und kann Fälle verarbeiten, in denen sich Quelle und Ziel überlappen.

So funktioniert das Kopieren

Die Kopierfunktion benötigt zwei Parameter: ein Ziel Slice dst und ein Quell-Slice src. Es gibt eine Ganzzahl zurück, die die Anzahl der erfolgreich kopierten Elemente darstellt. Die Anzahl der kopierten Elemente wird durch die Mindestlänge der Quell- und Ziel-Slices bestimmt.

Beispiele

Lassen Sie uns die Funktionalität des Kopierens anhand einiger Beispiele veranschaulichen:

<code class="go">src := []int{10, 11, 12, 13, 14}
dst := []int{0, 1, 2, 3, 4}

// Copy all elements from src to dst.
n := copy(dst, src)
fmt.Println(n, src, dst) // Output: 5 [10 11 12 13 14] [10 11 12 13 14]</code>

In diesem Beispiel werden alle fünf Elemente von src in dst kopiert, sodass beide Slices mit denselben Elementen verbleiben.

<code class="go">dst = []int{0, 1}

// Copy only as many elements as the shorter of src and dst.
n = copy(dst, src)
fmt.Println(n, src, dst) // Output: 2 [10 11 12 13 14] [10 11]</code>

In diesem Fall hat dst nur zwei Elemente, also nur Es werden zwei Elemente kopiert, was dazu führt, dass dst die ersten beiden Elemente von src enthält.

<code class="go">src = []int{10, 11}
dst = []int{0, 1, 2, 3, 4}

// Copy only as many elements as the shorter of src and dst.
n = copy(dst, src)
fmt.Println(n, src, dst) // Output: 2 [10 11] [10 11 2 3 4]</code>

Ähnlich gilt: Wenn src weniger Elemente als dst hat, werden nur die in src verfügbaren Elemente kopiert und die übrigen Elemente in dst unverändert bleiben中的字节拷贝到字节片([]byte)中:

Overlap

Copy kann Situationen bewältigen, in denen sich Quell- und Ziel-Slices überlappen. In solchen Fällen werden die Elemente im überlappenden Teil kopiert, wobei die Reihenfolge der Elemente im Ziel-Slice unverändert bleibt.
<code class="go">str := "Hello, World!"
data := make([]byte, 5)

// Copy 5 bytes from the UTF-8 representation of str into data.
n = copy(data, str)
fmt.Println(n, str, data) // Output: 5 Hello, World! [72 101 108 108 111]</code>

Fazit

Die Kopierfunktion in Go bietet eine praktische Möglichkeit, Elemente von einem Slice in ein anderes zu kopieren. Es ermöglicht eine flexible Handhabung von Fällen mit unterschiedlichen Schichtlängen und Überlappungen und ist somit ein nützliches Werkzeug für die Bearbeitung von Daten in Schichten.

Das obige ist der detaillierte Inhalt vonWie geht die Kopierfunktion von Go mit überlappenden Slices um?. 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