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

Pourquoi la tranche « s[lo:hi] » de Go exclut-elle l'élément à l'index « hi » ?

DDD
Libérer: 2024-12-09 19:36:21
original
278 Les gens l'ont consulté

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

Pourquoi Go Slice s[lo:hi] se termine-t-il à l'élément hi-1 ?

L'expression Go slice s[lo:hi] crée une tranche contenant des éléments de l'index lo à l'index hi-1 inclus. Ce comportement s'explique par plusieurs principes de conception :

Arithmétique des pointeurs

Dans Go, les tranches sont implémentées comme des pointeurs vers le tableau sous-jacent. L'utilisation de tableaux indexés 0 et d'un découpage inclusif-exclusif permet une arithmétique de pointeur simple. L'élément à l'index i dans la tranche est simplement l'élément pointé par le pointeur de la tranche plus i.

Longueur de la tranche

La longueur d'une tranche Go est également la position à laquelle trancher il. Cela signifie que arr[0:len(arr)] renvoie arr lui-même. Cette propriété est pratique pour extraire des données d'une tranche après une opération de lecture ou d'écriture.

Indices sans chevauchement

Le découpage inclusif-exclusif garantit que les sous-tranches contiguës d'un tableau ne se chevauchent pas. Par exemple, si arr = [1, 2, 3, 4], alors arr[0:2] = [1, 2], arr[2:4] = [3, 4] et arr[0:4] = arr. Cette propriété simplifie les opérations qui nécessitent un partitionnement ou une manipulation de sous-tranches.

Exemple

Considérez le code Go suivant :

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

Cette fonction divise une tranche d'entiers en sous-tranches consécutives basées sur la différence entre chaque élément et son prédécesseur. La technique de découpage inclusif-exclusif permet une mise en œuvre plus simple et plus efficace par rapport à l'utilisation du découpage 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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal