Dict

From Base de connaissances eggdrops & TCL
Jump to: navigation, search

dict - crée un dictionnaire : sortes de tableaux associatifs (array) sans nom, mais avec des fonctionalités supplémentaires.

Attention.png Uniquement à partir de tcl 8.5

Syntaxe

dict option ?valeurs?

Description

Dans sa version "humaine", un dictionnaire apparait comme une liste clé-valeur "k1 v1 k2 v2 k3 v3 ...". Attention, l'ordre des couples clé-valeur n'a aucun sens particulier : "k1 v1 k2 v2 k3 v3" et "k2 v2 k1 v1 k3 v3" correspondent au même dictionnaire.

Création d'un dictionnaire

set le_dico [dict create k1 v1 k2 v2 k3 v3]

Faute de dictionnaire, on aurait dû créer un tableau au moyen de la commande:

array set le_tableau {k1 v1 k2 v2 k3 v3}

Récupération de valeurs

Récupération de la valeur "v2" associée à la clé "k2":

puts [dict get $le_dico k2]
# donne v2

Ajouts de valeurs

Ajout de la clé k4 associée à la valeur v4 dans le dictionnaire :

dict set le_dico k4 v4
# k1 v1 k2 v2 k3 v3 k4 v4

Modification de valeurs

Modification le la valeur associée à la clé k3 :

dict set le_dico k3 v3n
# k1 v1 k2 v2 k3 v3n k4 v4

Suppression de valeur

Suppression de la clé k2 (et de sa valeur associée)

dict unset le_dico k2
# k1 v1 k3 v3n k4 v4

Liste des clés

puts [dict keys $le_dico]
# donne k1 k3 k4
puts [dict keys $le_dico *3]
# donne k3

Valeurs liste

dict lappend k5 v5
# donne k1 v1 k3 v3n k4 v4 k5 v5
dict lappend k5 v5a v5b
# donne k1 v1 k3 v3n k4 v4 k5 {v5 v5a v5b}

Nota Bene

Si une procédure doit accéder à un dictionnaire sans le modifier, on peut passer sa valeur. Avec un tableau, il faut toujours passer le nom :

proc get_val_dico {dico k} {return [dict get $dico $k]}
proc get_val_array {arrayName k} {upvar $arrayName array; return $array($k)}
puts [get_val_dico $le_dico k3]; # donne v3n
puts [get_val_array le_tableau k3]; # donne v3

Voir également

array, Utilisation des listes