Heim  >  Artikel  >  Backend-Entwicklung  >  Besprechen Sie den Änderungsvorgang von Golang Slice

Besprechen Sie den Änderungsvorgang von Golang Slice

PHPz
PHPzOriginal
2023-04-11 09:13:37679Durchsuche

In der Go-Sprache ist Slice eine leistungsstarke Datenstruktur, die kontinuierliche Datenblöcke problemlos verarbeiten kann. Im Vergleich zu Arrays haben Slices eine variable Länge und Elemente können hinzugefügt oder entfernt werden, was Slices zu einer der am häufigsten verwendeten Datenstrukturen in Go macht.

Bei der Verwendung von Slice müssen wir jedoch zwangsläufig einige Elemente im Slice ändern. In diesem Artikel wird der Änderungsvorgang von Slice erläutert.

  1. So ändern Sie das Element an einer bestimmten Position im Slice

Um die Elemente im Slice zu ändern, können Sie den Index verwenden, um wie ein Array auf die Elemente im Slice zuzugreifen. Der folgende Code zeigt beispielsweise, wie das Element an einer bestimmten Position im Slice geändert wird:

package main

import "fmt"

func main() {
    nums := []int{1, 2, 3, 4}
    fmt.Println(nums)   // 输出 [1 2 3 4]

    nums[1] = 5
    fmt.Println(nums)   // 输出 [1 5 3 4]
}

Im obigen Code initialisieren wir zunächst ein Slice mit 4 Ganzzahlen und ändern dann den Wert des zweiten Elements in 5. Zum Schluss drucken wir das geänderte Slice aus. Wie Sie sehen, war die Änderung erfolgreich.

  1. So fügen Sie Elemente zum Slice hinzu

Wir können die integrierte Funktion append() verwenden, um Elemente zum Slice hinzuzufügen. Der einfachste Weg, ein Slice zu ändern, ist die Verwendung der Funktion append(). Die Funktion append() wird ähnlich wie Array.push() in JavaScript verwendet. Der folgende Code zeigt, wie man einem Slice Elemente hinzufügt:

package main

import "fmt"

func main() {
    nums := []int{1, 2, 3, 4}
    fmt.Println(nums)   // 输出 [1 2 3 4]

    nums = append(nums, 5)
    fmt.Println(nums)   // 输出 [1 2 3 4 5]
}

Im obigen Code initialisieren wir zunächst ein Slice mit 4 Ganzzahlen und verwenden dann die Funktion append(), um 5 am Ende des Slice hinzuzufügen. Zum Schluss drucken wir das hinzugefügte Slice aus. Wie Sie sehen, war die Ergänzung erfolgreich.

Es ist zu beachten, dass das zugrunde liegende Array beim Hinzufügen von Elementen möglicherweise Speicherplatz neu zuweist, wenn die Anzahl der Elemente im Slice seine Kapazität erreicht hat, was zu Leistungseinbußen führt. Um eine unnötige Neuzuweisung von Speicherplatz beim Hinzufügen von Elementen zu vermeiden, sollten wir daher zunächst die integrierte Funktion cap() verwenden, um festzustellen, ob eine Erweiterung erforderlich ist:

if len(nums)+1 > cap(nums) {
     newNums := make([]int, len(nums), cap(nums)*2)
     copy(newNums, nums)
     nums = newNums
}

Dieses Codefragment prüft, ob im Slice genügend Kapazität zum Hinzufügen vorhanden ist ein neues Element. Wenn nicht, erstellen Sie ein neues Slice mit der doppelten Kapazität und kopieren Sie mit der Funktion copy() alle Elemente vom alten Slice in das neue Slice. Ordnen Sie abschließend das neue Slice dem ursprünglichen Slice zu. Dieser Ansatz ist effizienter, da er die Neuzuweisung des ursprünglichen Slice vermeidet und stattdessen die Kapazität des zugrunde liegenden Arrays erweitert.

  1. So entfernen Sie Elemente aus Slice

Ähnlich wie beim Hinzufügen von Elementen können wir Elemente mit der integrierten Funktion append() aus Slice entfernen. In Go gibt es keine integrierte Löschfunktion. Wir müssen die Funktion append() verwenden, um Elemente im Slice zu löschen. Der folgende Code zeigt, wie Elemente aus einem Slice gelöscht werden:

package main

import "fmt"

func main() {
    nums := []int{1, 2, 3, 4}
    fmt.Println(nums)   // 输出 [1 2 3 4]

    nums = append(nums[:1], nums[2:]...)
    fmt.Println(nums)   // 输出 [1 3 4]
}

Im obigen Code initialisieren wir zunächst ein Slice mit 4 Ganzzahlen und verwenden dann die Funktion append(), um das zweite Element zu löschen. Konkret verbinden wir zunächst das Subslice vom ersten Element mit dem zweiten Element (exklusiv) und das Subslice vom dritten Element mit dem letzten Element, wodurch wir ein neues Slice erhalten und es dem Original-Slice zuweisen.

Da Slice in Go eine Struktur ist, ist zu beachten, dass es einen Zeiger auf das zugrunde liegende Array sowie die Längen- und Kapazitätsinformationen des Slice enthält. Wenn wir also ein Element im Slice löschen, müssen wir ein neues Slice erstellen. und kopiert die Elemente im Original-Slice in das neue Slice.

  1. So ändern Sie mehrere Elemente in einem Slice

Wenn Sie mehrere Elemente in einem Slice ändern möchten, können Sie eine for-Schleife verwenden, um das Slice zu durchlaufen und das aktuelle Element bei jeder Iteration zu ändern. Der folgende Code zeigt, wie man mehrere Elemente in einem Slice ändert:

package main

import "fmt"

func main() {
    nums := []int{1, 2, 3, 4}
    fmt.Println(nums)   // 输出 [1 2 3 4]

    for i := 0; i < len(nums); i++ {
        nums[i] *= 2
    }
    fmt.Println(nums)   // 输出 [2 4 6 8]
}

Im obigen Code initialisieren wir zunächst ein Slice mit 4 Ganzzahlen und verwenden dann eine for-Schleife, um das Slice zu durchlaufen und das aktuelle Element mit 2 zu multiplizieren.

Es ist zu beachten, dass beim Ändern mehrerer Elemente in einem Slice das aktuelle Element bei jeder Iteration neu berechnet und in das Slice kopiert werden muss. Dies ist nicht nur ineffizient, sondern auch fehleranfällig.

Zusammenfassung

Das Obige ist eine Einführung in den Änderungsvorgang von Slice in Go. Um einzelne Elemente in einem Slice zu ändern, können Sie mithilfe der Indizierung wie bei einem Array auf die Elemente im Slice zugreifen. Um Elemente zu einem Slice hinzuzufügen, können wir die integrierte Funktion append() verwenden. Um ein Element aus einem Slice zu entfernen, können wir die Funktion append() verwenden und das angegebene Element entfernen, indem wir zwei Unter-Slices verketten. Wenn Sie schließlich mehrere Elemente im Slice ändern möchten, verwenden Sie eine for-Schleife, um den gesamten Slice zu durchlaufen und das aktuelle Element bei jeder Iteration zu ändern.

Das obige ist der detaillierte Inhalt vonBesprechen Sie den Änderungsvorgang von Golang Slice. 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