• fr

Utilisation des listes

Pourquoi

Parce que lorsque j'ai débuté en Tcl/Tk, elles m'ont posé quelques problèmes :

  • Dois-je fournir le nom de la liste ou son contenu ?
  • Est-ce que cela modifie ma liste existante ?

Le résumé

Le nom de la liste n'est utilisé que:

  • lors de son affectation par set
  • lors de l'ajout par lappend
  • lors de la modification par lset

Dans tous les autres cas, on travaille sur le contenu de la liste.

linsert, lreplace et lsort ne modifient pas la liste existante mais retournent une liste modifiée.

Un exemple vaut mieux qu'un long discours

#!/usr/bin/tclsh
#-------------------------------------------------------------------------------
#
#-------------------------------------------------------------------------------

# Le nom de la liste n'est utilisé que:
#  - lors de son affectation par set
#  - lors de l'ajout par lappend
#  - lors de la modification par lset
# Dans tous les autres cas, on travaille sur le contenu de la liste
#
# Attention linsert, lreplace et lsort ne modifient pas la liste existante
# mais retournent une liste modifiée

set Unites [ list "un" "deux" "quatre" "cinq" "six" "sept" "8" ]
puts "La liste Unites contient : $Unites"
puts ""

# llength retourne le nombre d'éléments de la liste
set NbElements [ llength $Unites ]
puts "Elle contient $NbElements éléments."

# lindex retourne l'élément à l'index donné. Attention commence à 0
puts "Leur numérotation commence à 0, on a donc:"
puts " - élément 0: [ lindex $Unites 0 ] "
puts " - élément 3: [ lindex $Unites 3 ] "
puts ""

# lsearch retouren la position d'un élément
set Position [ lsearch $Unites "quatre" ]
puts "L'élément \"quatre\" se trouve en position $Position"
puts ""
set Position [ lsearch $Unites "zut" ]
puts "L'élément \"zut\" se trouve en position $Position"
puts ""


# linsert retourne la liste modifiée mais ne touche pas la liste existante
# Si on veut modifier la liste existante, il faut la réafectée
puts "On ajoute \"trois\""
set Unites [ linsert $Unites 2 "trois" ]
puts "La liste Unites contient maintenant: $Unites"
puts ""

# lappend ajoute en fin de liste existante
puts "On ajoute \"neuf\""
lappend Unites "9"
puts "La liste Unites contient maintenant: $Unites"
puts ""

# lreplace retourne la liste modifiée mais ne touche pas la liste existante
# Si on veut modifier la liste existante, il faut la réafectée
puts "Oops, on corrige"
set Unites [ lreplace $Unites 7 8 "huit" "noeuf" ]
puts "La liste Unites contient maintenant: $Unites"
puts ""

# lset modifie la liste existante
puts "Re oops, on re-corrige"
lset Unites 8 "neuf"
puts "La liste Unites contient maintenant: $Unites"
puts ""

set Dizaines [ list "dix" "vingt" "trente" "quarante" "cinquante" "soixante" \
				   "soixante dix" "quatre-vingt" "quatre-vingt dix" ]
puts "La liste Dizaines contient : $Dizaines"
puts ""

# join met bout à bout les élements de la liste en les séparant par le
# séparateur fourni
puts "Si on joint les éléments par un \"-\", on obtient:"
set Texte [ join $Dizaines "-" ]
puts $Texte
puts ""

# split convertit une chaîne en une liste en utilisant le séparateur
# fourni comme délimiteur d'éléments
puts "Si maintenant on sépare ce texte sur les \"-\", on obtient:"
puts [ split $Texte "-" ]
puts "Observez ce que sont devenus quatre-vingt et quatre-vingt dix"
puts ""

# concat met bout à bout les listes
set Cumul [ concat $Unites $Dizaines ]
puts "Mettons nos deux listes bout à bout (concaténation)."
puts "On obtient : $Cumul"
puts "alors que les listes originales n'ont pas bougées"
puts "Unites: $Unites"
puts "Dizaines: $Dizaines"
puts ""

# lsort trie la liste en fonction des options fournies
# Si on veut modifier la liste existante, il faut la réafectée
puts "Trions notre liste Unites en ascii de façon décroissante"
set Triee [ lsort -ascii -decreasing $Unites ]
puts "Triee: $Triee"
puts "Unites: $Unites"
puts ""
	

Licence

Cette documentation est mise à disposition sous licence No Obligation License, soit “Aucune obligation pour vous. Aucune obligation pour moi.”

Téléchargement

Historique

Date Version Auteur Description des modifications
22 octobre 2006 1.0.0 Alain JAFFRE Première version publique.