Comprendre l'indexation des tranches dans Go : pourquoi s[lo:hi] se termine à l'élément hi-1
Dans Go, les tranches représentent des séquences de éléments. Lors du découpage d'une tranche, l'expression s[lo:hi] renvoie une nouvelle tranche qui contient des éléments de l'index lo (inclus) à hi (exclusif).
Raison d'être du découpage inclusif-exclusif
Le choix d'utiliser un découpage inclusif-exclusif (où hi-1 est utilisé comme limite supérieure) au lieu d'un découpage inclusif-inclusif (où hi est utilisé comme limite supérieure) repose sur plusieurs avantages :
-
Simplicité arithmétique des pointeurs : Les tranches Go sont stockées sous forme de pointeurs, et la méthode inclusive-exclusive permet arithmétique simple du pointeur. Chaque élément d'une tranche est situé à l'adresse mémoire du pointeur de tranche plus son index, ce qui facilite les opérations du pointeur.
-
Utilitaire de longueur de tranche : La longueur d'une tranche est également la identique à l'indice auquel il peut être découpé pour obtenir la tranche d'origine. Par exemple, s[0:len(s)] fournit la tranche d'origine s. Cela simplifie les opérations impliquant la manipulation de tranches.
-
Indices sans chevauchement : Le découpage inclusif-exclusif garantit que les indices des tranches suivantes ne se chevauchent pas. Si nous avons des tranches s[lo1:hi1], s[hi1:hi2], s[hi2:hi3], etc., ces tranches couvrent ensemble la totalité de la tranche d'origine s.
-
Partage simplifié Algorithme : Cette méthode de découpage simplifie les algorithmes qui divisent les tableaux en fonction d'entiers non consécutifs. En revanche, le découpage inclusif-inclusif nécessite une logique plus complexe pour obtenir le même résultat.
Exemple :
Considérons la tranche suivante :
p := []int{0, 10, 20, 30, 40, 50}
Copier après la connexion
- p[0:3] renverrait [0, 10, 20], à l'exclusion de l'élément 30.
- p[3:6] renverrait [30, 40, 50], y compris l'élément 30.
- p[0:len(p)] renverrait la tranche d'origine p.
Conclusion :
Le découpage inclusif-exclusif La méthode dans Go offre une simplicité dans l'arithmétique du pointeur, une manipulation pratique des tranches et facilite la création d'algorithmes efficaces pour les opérations de tranche.
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!