Maison  >  Article  >  développement back-end  >  Slice renvoie une longueur inattendue

Slice renvoie une longueur inattendue

WBOY
WBOYavant
2024-02-09 10:21:29683parcourir

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.

Contenu de la question

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

Solution de contournement

0 处为数组指定 stringTout 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"}
stringC'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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer