Heim  >  Artikel  >  Backend-Entwicklung  >  Wie wirkt sich das Löschen von Elementen aus einem Go-Slice auf dessen Kapazität aus?

Wie wirkt sich das Löschen von Elementen aus einem Go-Slice auf dessen Kapazität aus?

Linda Hamilton
Linda HamiltonOriginal
2024-11-01 09:00:30597Durchsuche

How Does Dropping Elements from a Go Slice Affect Its Capacity?

Kapazität von Slices nach dem Ablegen von Elementen

Beim Arbeiten mit Slices in Go ist es wichtig zu verstehen, wie sich ihre Kapazität je nach Typ ändert Änderung vorgenommen. Um dies zu veranschaulichen, untersuchen wir einen Codeausschnitt und seine Ausgabe:

package main

import "fmt"

func main() {
    s := []int{2, 3, 5, 7, 11, 13}
    printSlice(s)

    // Drop its last two values
    s = s[:len(s)-2]
    printSlice(s)

    // Drop its first two values.
    s = s[2:]
    printSlice(s)
}

func printSlice(s []int) {
    fmt.Printf("len=%d cap=%d %v\n", len(s), cap(s), s)
}

Ausgabe:

len=6 cap=6 [2 3 5 7 11 13]
len=4 cap=6 [2 3 5 7]
len=2 cap=4 [5 7]

Warum unterschiedliche Kapazitäten nach dem Ablegen von Elementen?

Beachten Sie, dass die Kapazität unverändert bei 6 bleibt, wenn wir die letzten beiden Elemente aus dem Slice entfernen (s = s[:len(s)-2]), während die ersten beiden Elemente gelöscht werden (s = s[2:] ) reduziert die Kapazität auf 4.

Der Grund für diesen Unterschied liegt in der Art und Weise, wie Slices in Go implementiert werden. Slices sind im Wesentlichen ein Blick in ein zugrunde liegendes Array. Durch das Weglassen der letzten beiden Werte wird die Länge des Slice angepasst, d. h. die Anzahl der Elemente, auf die das Slice zeigt, es hat jedoch keinen Einfluss auf die Kapazität, d. h. die Größe des zugrunde liegenden Arrays.

Das Weglassen der ersten beiden Werte jedoch Werte führen dazu, dass ein neues zugrunde liegendes Array erstellt wird, um das reduzierte Slice aufzunehmen. Dies liegt daran, dass die Elemente im ursprünglichen zugrunde liegenden Array um zwei Stellen nach unten verschoben werden, um die Lücke zu füllen, und ein neues Array erforderlich ist, um die verschobenen Elemente aufzunehmen.

Das obige ist der detaillierte Inhalt vonWie wirkt sich das Löschen von Elementen aus einem Go-Slice auf dessen Kapazität aus?. 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