Langage tcl › Les listes

Les listes

Introduction

Soit la liste suivante:

set toto "un" "deux" "trois"

Nous pouvons tout aussi bien la déclarer comme ceci, cela produit le même résultat.

set toto [list "un" "deux" "trois"]

Personnellement je préfère la déclarer comme la 2eme façon, je la trouve bien plus compréhensible et plus lisible.

Pour résumer très simplement l'utilisation des liste, voici diverses astuces pour la gestion des listes :

 

Ajouter une valeur à la liste

Pour ajouter une nouvelle valeur à la fin de la liste

Ecrivez ceci :

lappend toto "ma nouvelle valeur"

Editer une valeur en connaissant son index

Utilisez la commande lset

Dans notre exemple, pour remplacer "deux" par "dix, écrivez ceci :

lset toto 1 "dix"
  • lset : commande pour ajuster une valeur dans une liste
  • toto : le nom de la liste à modifier
  • 1 : l'index de l'item à modifier (les index commencent toujours par 0)
  • "dix" : la nouvelle valeur

Enlever une valeur par sa valeur dans la liste

Ecrivez ceci :

set idx [lsearch $toto "deux"]
set toto [lreplace $toto $idx $idx]
  • idx est l'index résultant de la recherche de la chaine "deux"
  • la 2eme ligne remplace "deux" par une chaine vide, c'est à dire l'enlève de la liste.

Enlever une valeur par son index

Dans notre exemple si je veux retirer la chaine de caractère "deux" voici comment faire

set toto [lreplace $toto 1 1]
  • lreplace : remplace une chaine
  • $toto : la liste pointée pour la modification
  • le premier un : L'index de la chaine à remplacer
  • le 2eme un : le nombre de valeur qui seront affectés

trier une liste par ordre alphabétique

Utilisez la commande lsort avec l'option -dictionnary comme ceci :

set a [list "scale" "tk_optionMenu" "menubutton" "scrollbar" "notebook" "panedwindow" "progressbar" "label"]
set mylist [lsort -dictionary $a]

 

Enlever des doublons en triant par ordre alphabetique

Soit la liste suivante :

set maliste [list bonjour bonjour aurevoir tchao salut salut]

Pour enlever tous les doublons, il suffit de créer une nouvelle liste en utilisant l'opion -unique comme ceci :

set nouvelleliste [lsort -unique $maliste]
puts $nouvelleliste

le résultat sera  affiché comme ceci :

aurevoir bonjour tchao salut

enlever es doublons en conservant l'ordre de  la liste

Soit la liste suivante :

set l {this that when what when how} 

Pour enlever tous les doublons en gardant l'ordre non alphabétique, il suffit d'écrire ce code :

foreach element $l {dict set tmp $element 1}
set unique [dict keys $tmp]
puts $unique