Maison > développement back-end > Golang > le corps du texte

Pourquoi les tranches Go ne peuvent-elles pas être utilisées comme clés de carte ?

Susan Sarandon
Libérer: 2024-11-19 05:45:02
original
595 Les gens l'ont consulté

Why Can't Go Slices Be Used as Map Keys?

Limitations de l'utilisation des tranches Go comme clés de carte

Les tranches Go, qui sont essentiellement des implémentations de tableaux Go, partagent des similitudes avec les tableaux en termes de leur nature de type valeur. Cependant, leur pertinence en tant que clés de mappage diffère considérablement de celle des tableaux. Cette distinction vient du fait que les tranches font référence à des tableaux sous-jacents, ce qui introduit des complexités qui ne sont pas présentes avec les tableaux.

Comme l'explique Nigel Tao, copier une tranche est nettement plus rapide que copier un tableau, grâce à son O(1 ) complexité temporelle par rapport à la complexité O (longueur) des tableaux. Cette différence met en évidence la distinction entre les types valeur (tableaux) et les types référence (tranches).

Lors de la définition des clés de mappage, il devient nécessaire d'établir une notion d'égalité. Pour les tableaux, l’égalité est directement déterminée en comparant les éléments individuels. Cependant, pour les tranches, il existe plusieurs façons de définir l’égalité. Envisagez l'égalité par élément ou l'égalité en fonction du stockage de tableau sous-jacent auquel ils font référence.

De plus, le fait d'insérer une clé dans une carte crée une incertitude quant à la nécessité d'une copie coûteuse de l'intégralité du tableau de sauvegarde. Bien que la copie puisse correspondre aux attentes, elle s'écarterait du comportement d'affectation des tranches.

Pour illustrer ces complexités, considérons l'exemple suivant :

m := make(map[[]int]bool)
s0 := []int{6, 7, 8}
s1 := []int{6, 7, 8}
s2 := s0
m[s0] = true
s2[0] = 9
println(m[s0])
println(m[s1])
println(m[s2])
Copier après la connexion

Les différentes attentes que les programmeurs peuvent avoir à propos du Les résultats démontrent le potentiel de confusion qui survient lors de l’utilisation de tranches comme clés de carte. Pour éviter de telles ambiguïtés, le choix a été fait d'interdire l'utilisation de tranches comme clés de carte dans Go.

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