Copier des dictionnaires
Fait partie de la section Logique et flux d’exécution du Journey GDScript de Coddy. Leçon 22 sur 78.
Affecter un dictionnaire à une autre variable ne le copie pas. Les deux variables font référence au même dictionnaire, donc une modification effectuée par l’une apparaît dans l’autre :
var template := {"type": "slime", "hp": 30}
var enemy := template
enemy["hp"] = 10
print(template["hp"]) # 10duplicate() crée un nouveau dictionnaire contenant les mêmes paires. Modifier la copie ne change pas l’original :
var original := {"type": "slime", "hp": 30}
var copy := original.duplicate()
copy["hp"] = 99
print(original["hp"]) # 30duplicate() crée une copie superficielle : la copie possède ses propres paires, mais une valeur qui est un tableau ou un dictionnaire est toujours partagée entre les deux :
var hero := {"stats": {"hp": 100}, "items": ["sword"]}
var clone := hero.duplicate()
clone["stats"]["hp"] = 1
clone["items"].append("shield")
print(hero){ "stats": { "hp": 1 }, "items": ["sword", "shield"] }Passe true pour une copie profonde : duplicate(true) copie également chaque tableau et dictionnaire qu’elle contient, de sorte que les deux ne partagent rien :
var twin := hero.duplicate(true)
twin["stats"]["hp"] = 50
print(hero["stats"]["hp"]) # 1Une copie superficielle suffit lorsque chaque valeur est un nombre, une chaîne ou un booléen. Dès qu’une valeur est un tableau ou un dictionnaire, utilise duplicate(true). Les tableaux fonctionnent de la même manière : grid.duplicate(true) copie un tableau à 2 dimensions avec ses lignes.
Défi
FacileFais apparaître une vague d’ennemis à partir d’un modèle. Le dictionnaire template est fourni. Le programme lit deux nombres entiers, un par ligne : le nombre d’ennemis à faire apparaître (n) et un bonus de hp.
Pour chaque numéro d’ennemi i de 1 à n :
- Fais une copie de
templatequi ne partage rien avec lui. - Ajoute la clé
"id"avec la valeuri. - Ajoute
bonus * iau"hp"dans"stats". - S’il s’agit du dernier ennemi, ajoute
"crown"à son"loot". - Affiche l’ennemi.
Enfin, affiche Template: suivi du modèle, qui doit rester inchangé. Pour les entrées 2 et 10, la sortie est :
{ "type": "slime", "stats": { "hp": 40, "speed": 2 }, "loot": ["gel"], "id": 1 }
{ "type": "slime", "stats": { "hp": 50, "speed": 2 }, "loot": ["gel", "crown"], "id": 2 }
Template: { "type": "slime", "stats": { "hp": 30, "speed": 2 }, "loot": ["gel"] }Essayez vous-même
extends Node
func _ready():
var template := {"type": "slime", "stats": {"hp": 30, "speed": 2}, "loot": ["gel"]}
var n := int(OS.read_string_from_stdin())
var bonus := int(OS.read_string_from_stdin())
# Génère et affiche les n ennemis
# Affiche le modèle
pass
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logique et flux d’exécution
1Les chaînes de caractères en profondeur
Méthodes des chaînesRechercher dans les chaînesRemplacer et supprimer les espacesDécouper et joindreRécapitulatif - Vérifier un nom d’utilisateur4Dictionnaires, partie 2
Dictionnaires imbriquésTableaux de dictionnairesFusionner des dictionnairesCopier des dictionnairesRécapitulatif - Compteur de fréquence7Énumérations
Qu’est-ce qu’une énumération ?Définir une énumérationValeurs d’une énumérationÉnumérations avec matchRécapitulatif - Feu de circulation10Fonctions avancées
Renvoyer plusieurs valeursFonctions lambda, partie 1Fonctions lambda, partie 2Récapitulatif - Tri avec lambdaFonctions récursives, partie 1Fonctions récursives, partie 2Récapitulatif - Somme d’un tableau imbriqué13Système de gestion des stocks
Présentation du projetAjouter un article2Prise de décision avancée
Correspondance avec des variablesGardes de correspondanceMotifs de tableauMotifs de dictionnaireVérifications d’appartenanceRécapitulatif – Analyseur de commandes5Application de carnet d’adresses
Afficher le menuAjouter un contact8Gestionnaire des dossiers étudiants
Aperçu du projetAjouter un étudiant3Tableaux multidimensionnels
Bases des tableaux 2DAccéder aux éléments d’un tableau 2DBoucles imbriquées avec des tableaux 2DRécapitulatif - Tableaux 2DTableaux irréguliersMotifs courants des tableaux 2DRécapitulatif - Plateau de jeu6Les ensembles avec les dictionnaires
Qu’est-ce qu’un ensemble ?Un dictionnaire comme ensembleAjouter et supprimerUnion et intersectionDifférence d’ensemblesRécapitulatif – Supprimer les doublons9Agrégation avancée de données
Additionner des valeursTrouver le minimum et le maximumTri personnaliséRécapitulatif - Trieur de dictionnairesEntraînez-vous par vous-même : Compilateur GDScript en ligne