Maison > Article > développement back-end > Slice renvoie une longueur inattendue
l'éditeur php Youzi rencontre souvent le problème du retour d'une longueur inattendue lors de l'utilisation de l'opération de découpage. L'opération de découpage est l'une des opérations de tableau couramment utilisées. Vous pouvez obtenir certains éléments du tableau en spécifiant la position de départ et la position de fin. Cependant, nous constatons parfois que la longueur de tranche renvoyée n'est pas celle attendue, ce qui peut être dû à des erreurs ou des malentendus courants. Dans cet article, nous présenterons en détail les problèmes que vous pouvez rencontrer lors des opérations de découpage et proposerons des solutions pour vous aider à mieux comprendre et utiliser les opérations de découpage.
Je travaillais sur Golang et je me suis arrêté et ça m'a dérouté.
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)) }
Le résultat est
13 9 3 7 3
La tranche mensuelle comporte 12 éléments, mais cap(month)
et len(month)
renvoient 13
, pourquoi ? cap(month)
和 len(month)
返回 13
,为什么?
首先,month
是一个数组 - 不是切片 - 其类型为 [13]string
。只需查看其类型,我们就知道它有 13 个元素(长度),而切片的类型为 []string
0
处为数组指定 string
Tout d'abord, month
est un tableau - pas une tranche - et son type est [13]string
. Rien qu'en regardant son type, nous savons qu'il comporte 13 éléments (longueur) et que le type de la tranche est []string
.
L'indexation des tableaux et des tranches commence à partir de zéro, pas de un. Puisque vous n'indexez pas
valeur :
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
C'est équivalent à :
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"}C'est-à-dire que la valeur zéro
(c'est-à-dire la chaîne vide) de ...
替换为 13
est fournie comme premier élément.
Veuillez noter que j'ai
. Les points de suspension indiquent au compilateur de déduire la longueur du tableau (qui fait partie de son type) en fonction de l'initialiseur.
month
的长度仍将为 13
Même si vous utilisez un littéral slice au lieu d'un littéral tableau comme initialiseur :
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"}🎜Pour les mêmes raisons que ci-dessus, (tranchage dans ce cas) 🎜. 🎜
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!