Slice gibt eine unerwartete Länge zurück

WBOY
Freigeben: 2024-02-09 10:21:29
nach vorne
688 Leute haben es durchsucht

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.

Frageninhalt

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))
}
Nach dem Login kopieren

Die Ausgabe ist

13
9
3
7
3
Nach dem Login kopieren

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

Problemumgehung

0 处为数组指定 stringZuallererst 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"}
Nach dem Login kopieren
stringEs 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"}
Nach dem Login kopieren
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"}
Nach dem Login kopieren
🎜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!

Quelle:stackoverflow.com
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage