Der Go-Slice-Ausdruck s[lo:hi] erstellt ein Slice, das Elemente enthält vom Index lo bis einschließlich Index hi-1. Dieses Verhalten wird durch mehrere Designprinzipien erklärt:
In Go werden Slices als Zeiger auf das zugrunde liegende Array implementiert. Die Verwendung von 0-indizierten Arrays und inklusive-exklusivem Slicing ermöglicht eine einfache Zeigerarithmetik. Das Element am Index i im Slice ist einfach das Element, auf das der Slice-Zeiger plus i zeigt.
Die Länge eines Go-Slices ist auch die Position, an der geschnitten werden soll Es. Das bedeutet, dass arr[0:len(arr)] arr selbst zurückgibt. Diese Eigenschaft eignet sich zum Extrahieren von Daten aus einem Slice nach einem Lese- oder Schreibvorgang.
Inklusiv-exklusives Slicing stellt sicher, dass zusammenhängende Unter-Slices eines Arrays sich nicht überlappen. Wenn beispielsweise arr = [1, 2, 3, 4], dann arr[0:2] = [1, 2], arr[2:4] = [3, 4] und arr[0:4] = arr. Diese Eigenschaft vereinfacht Vorgänge, die eine Partitionierung oder Manipulation von Unter-Slices erfordern.
Betrachten Sie den folgenden Go-Code:
func consecutiveSlices(ints []int) [][]int { ret := make([][]int, 0) i, j := 0, 1 for j < len(ints) { if ints[j] != ints[j-1] + 1 { ret = append(ret, ints[i:j]) i = j } } ret = append(ret, ints[i:j]) return ret }
Diese Funktion teilt ein Slice von Ganzzahlen in auf aufeinanderfolgende Unterscheiben basierend auf der Differenz zwischen jedem Element und seinem Vorgänger. Die Inclusive-Exclusive-Slicing-Technik ermöglicht eine einfachere und effizientere Implementierung im Vergleich zur Verwendung von Inclusive-Inclusive-Slicing.
Das obige ist der detaillierte Inhalt vonWarum schließt Gos „s[lo:hi]'-Slice das Element am Index „hi' aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!