Go-Slices: Kapazität und Länge entmystifizieren
In Go sind Slices eine leistungsstarke Datenstruktur für die Arbeit mit Datensammlungen. Zwei wichtige Konzepte im Zusammenhang mit Slices sind Kapazität und Länge, deren Verständnis zunächst verwirrend sein kann.
Betrachten Sie das folgende Beispiel:
func main() { a := make([]int, 5) // [0,0,0,0,0] len=5 cap=5 b := make([]int, 0, 5) // [] len=0 cap=5 c := b[:2] // [0,0] len=2 cap=5 d := c[2:5] // [0,0,0] len=3 cap=3 }
Kapazität vs. Länge
In diesem Beispiel hat a eine Länge von 5 (die Anzahl der Elemente, die es enthält) und eine Kapazität von 5 (die Anzahl der Elemente, die es enthalten kann). vor Neuzuweisung halten). b hat eine Länge von 0 und eine Kapazität von 5, was darauf hinweist, dass es zunächst keine Elemente enthält, aber das Potenzial hat, bis zu 5 Elemente aufzunehmen.
Zeroed Elements
Wenn Sie ein Slice mit make([]int, 0, 5) wie in b erstellen, wird ein Backing-Array erstellt und mit dem Nullwert für seine Elemente initialisiert. Das bedeutet, dass, obwohl b anfangs keine Elemente hat, sein Hintergrundarray fünf auf Null gesetzte Werte enthält.
Wenn Sie ein Slice segmentieren, erstellen Sie ein neues Slice, das dasselbe Backing-Array verwendet. Wenn Sie also c := b[:2] zuweisen, erstellen Sie ein neues Slice, das auf die ersten beiden auf Null gesetzten Elemente des Hintergrundarrays verweist. Daher hat c eine Länge von 2 und enthält die Werte [0,0].
Kapazität der geschnittenen Scheiben
Wenn Sie eine Scheibe schneiden, wird die Kapazität der Der resultierende Slice wird durch die Differenz zwischen dem letzten Index des Slice-Ausdrucks und dem ersten Index bestimmt. Im Fall von d := c[2:5] beträgt dieser Unterschied 3 (5 - 2). Daher hat d eine Kapazität von 3.
Fazit
Das Verständnis von Kapazität und Länge ist entscheidend für die effektive Arbeit mit Slices in Go. Denken Sie daran, dass Slices immer auf ein Backing-Array verweisen und die Kapazität die Größe dieses Backing-Arrays darstellt. Durch das Slicen von Slices erstellen Sie neue Slices, die dasselbe Backing-Array gemeinsam nutzen und dessen Eigenschaften, einschließlich seiner Kapazität, erben.
Das obige ist der detaillierte Inhalt vonGo Slices: Was ist der Unterschied zwischen Kapazität und Länge?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!