Go : Comprendre l'ordre des itérations dans les clés de carte
Dans le langage de programmation Go, les cartes sont implémentées sous forme de hashmaps. L'ordre d'itération des clés de mappage n'est pas explicitement spécifié dans la spécification du langage de programmation Go, car il peut varier en fonction de l'implémentation.
Fonction de hachage et équivalence
Le Go Le runtime utilise une implémentation de hashmap unifiée écrite en C. Les seules variations entre map[string]T et map[byte]T résident dans la fonction de hachage, la fonction d'équivalence et la copie. fonction.
Itération ordonnée ou aléatoire
Avant Go 1, l'ordre d'itération des clés de carte dépendait de l'ordre d'insertion uniquement lorsque des collisions de clés se produisaient. Sinon, l'ordre était indépendant du type de clé ou de la séquence d'insertion.
Cependant, dans la dernière version hebdomadaire de Go et Go 1, l'ordre des itérations a été randomisé. Une clé choisie de manière pseudo-aléatoire lance l'itération, avec le calcul du hashcode amorcé par un nombre pseudo-aléatoire. Ce changement garantit que l'ordre est différent à chaque fois qu'un programme est exécuté, même avec les mêmes données d'entrée.
String Maps : une coïncidence
Votre observation selon laquelle les chaînes sont mappées apparemment, avoir un ordre d'itération prévisible était une coïncidence. Bien que l'ordre puisse rester constant pour une exécution particulière, il n'est pas garanti et peut varier selon les différentes exécutions.
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!