Indexation des éléments Go Slice : pourquoi s[lo:hi] se termine à l'élément hi-1
Dans une tranche Go, l'expression s [lo:hi] est évalué comme une tranche d'éléments de la position lo à la position hi-1. Cela peut sembler contre-intuitif, car on pourrait s’attendre à ce qu’il inclue l’élément hi. Cependant, cette décision repose sur plusieurs raisons de conception.
L'un des avantages de cette approche concerne l'arithmétique des pointeurs. Dans des langages comme C, un tableau est représenté comme un pointeur vers son premier élément. L'utilisation de tableaux indexés 0 et d'un découpage inclusif-exclusif simplifie le calcul des adresses d'éléments, car l'adresse de l'élément i est simplement le pointeur du tableau plus i.
Deuxièmement, ce schéma d'indexation permet d'extraire la tranche d'origine en spécifiant arr[0:len(arr)]. Ceci est utile dans des scénarios tels que la lecture de données dans une tranche, puis l'extraction de la tranche non vide sans opérations supplémentaires.
Enfin, cela empêche le chevauchement d'index. Cela signifie que lors du partitionnement d'un tableau en sous-tranches avec des indices consécutifs, les tranches couvrent entièrement la totalité du tableau. Cela facilite des opérations telles que la division d'un tableau en fonction d'entiers non consécutifs, comme le démontre l'extrait de code ci-dessous :
func consecutiveSlices(ints []int) [][]int { ret := make([][]int, 0) i, j := 0, 1 for j < len(ints) { if ints[j] != ints[j-1] + 1 { ret = append(ret, ints[i:j]) i = j } } ret = append(ret, ints[i:j]) return ret }
Aurait-il été plus intuitif pour s[lo:hi] d'inclure l'élément hi ? Oui, peut-être pour les débutants. Cependant, les avantages des tableaux indexés 0 et du découpage inclusif-exclusif, notamment l'arithmétique simplifiée des pointeurs, l'extraction de tranches transparente et les indices sans chevauchement, l'emportent sur les avantages du découpage intuitif inclusif-inclusif.
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!