Maison > développement back-end > Golang > Pourquoi la tranche « s[lo:hi] » de Go exclut-elle le « hi »-ème élément ?

Pourquoi la tranche « s[lo:hi] » de Go exclut-elle le « hi »-ème élément ?

Mary-Kate Olsen
Libérer: 2024-12-08 15:30:10
original
274 Les gens l'ont consulté

Why Does Go's `s[lo:hi]` Slice Exclude the `hi`-th Element?

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
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal