Heim > Artikel > Backend-Entwicklung > Slice gibt eine unerwartete Länge zurück
php-Editor Youzi stößt häufig auf das Problem, dass bei Verwendung des Slicing-Vorgangs unerwartete Längen zurückgegeben werden. Die Slicing-Operation ist eine der am häufigsten verwendeten Array-Operationen. Sie können einige Elemente des Arrays erhalten, indem Sie die Startposition und die Endposition angeben. Manchmal stellen wir jedoch fest, dass die zurückgegebene Slice-Länge nicht den Erwartungen entspricht, was auf häufige Fehler oder Missverständnisse zurückzuführen sein kann. In diesem Artikel stellen wir die Probleme, die bei Slicing-Vorgängen auftreten können, ausführlich vor und stellen Lösungen bereit, die Ihnen helfen, Slicing-Vorgänge besser zu verstehen und zu verwenden.
Ich habe an Golang gearbeitet und habe aufgehört, weil es mich verwirrt hat.
package main import "fmt" func main() { month := [...]string{1: "jan", 2: "fab", 3: "march", 4: "april", 5: "may", 6: "june", 7: "july", 8: "aug", 9: "sep", 10: "oct", 11: "nov", 12: "dec"} fmt.println(cap(month)) summer := month[6:9] q2 := month[4:7] fmt.println(cap(q2)) fmt.println(len(q2)) fmt.println(cap(summer)) fmt.println(len(summer)) }
Die Ausgabe ist
13 9 3 7 3
Das Monatssegment hat 12 Elemente, aber cap(month)
und len(month)
geben 13
zurück, warum? cap(month)
和 len(month)
返回 13
,为什么?
首先,month
是一个数组 - 不是切片 - 其类型为 [13]string
。只需查看其类型,我们就知道它有 13 个元素(长度),而切片的类型为 []string
0
处为数组指定 string
Zuallererst ist Monat
ein Array – kein Slice – und sein Typ ist [13]string
. Wenn wir uns nur seinen Typ ansehen, wissen wir, dass er 13 Elemente (Länge) hat und der Typ des Slice []string
ist.
Array- und Slice-Indizierung beginnt bei Null, nicht bei Eins. Da Sie den
-Wert nicht indizieren:
month := [...]string{1: "jan", 2: "fab", 3: "march", 4: "april", 5: "may", 6: "june", 7: "july", 8: "aug", 9: "sep", 10: "oct", 11: "nov", 12: "dec"}
string
Es ist äquivalent zu:
month := [13]string{0: "", 1: "jan", 2: "fab", 3: "march", 4: "april", 5: "may", 6: "june", 7: "july", 8: "aug", 9: "sep", 10: "oct", 11: "nov", 12: "dec"}Das heißt, der Nullwert
(also der leere String) von ...
替换为 13
wird als erstes Element bereitgestellt.
Bitte beachten Sie, dass ich
habe. Die Auslassungspunkte weisen den Compiler an, die Länge des Arrays (das Teil seines Typs ist) basierend auf dem Initialisierer abzuleiten.
month
的长度仍将为 13
Auch wenn Sie als Initialisierer ein Slice-Literal anstelle eines Array-Literals verwenden:
month := []string{1: "Jan", 2: "Fab", 3: "March", 4: "April", 5: "May", 6: "June", 7: "July", 8: "Aug", 9: "Sep", 10: "Oct", 11: "Nov", 12: "Dec"}🎜Aus den gleichen Gründen wie oben (in diesem Fall Schneiden) 🎜. 🎜
Das obige ist der detaillierte Inhalt vonSlice gibt eine unerwartete Länge zurück. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!