====== lsort ======
Trie les éléments d'une liste
===== Syntaxe =====
lsort ?options? list
===== Description =====
Cette commande trie les éléments de //list//, retournant une nouvelle liste triée. L'implémentation de la commande **lsort** utilise l'algorithme merge-sort qui est un tri stable ayant pour performance caractéristique O(n log n).
Par défaut un tri ASCII est utilisé avec le résultat renvoyé en ordre ascendant. Néanmoins, quelconque des options suivantes peut être spécifiée avant list pour contrôler le processus de tri (les abréviations uniques sont acceptées):
* **-ascii** Utilise comparaison de chaîne avec tri ASCII. Par défaut.
* **-dictionary** Utilise une comparaison dictionary-style. Identique à -ascii excepté que
* la casse est ignorée sauf pour différencier
* si deux chaînes contiennent des nombres, les nombres sont comparés comme des entiers, pas des caractères Par exemple, en mode -dictionary, bigBoy est entre bigbang et bigboy, et x10y entre x9y et x11y.
* **integer** Convertit les éléments de la liste en entiers et utilise la comparaison entière.
* **-real** Convertit les éléments de la liste en valeurs flottantes et utilise la comparaison flottante.
* **-command //command//** Utilise //command// comme commande de comparaison. Pour comparer deux éléments, évalue un script Tcl consistant de command avec les deux éléments ajoutés comme arguments supplémentaires. Le script renverra un entier inférieur à, égal à, ou supérieur à zéro si le premier élément est consideré inférieur à, égal à, ou supérieur au second, respectivement.
* **-increasing** Trie la liste en ordre croissant ("plus petit" articles en premier). Par défaut.
* **-decreasing** Trie la liste en ordre décroissant ("plus grand " articles en premier).
* **-index //index//** Si cette option est spécifiée, chacun des éléments de list doit lui-même être une sous liste Tcl correcte. Au lieu de tris basés sur des sous listes complètes, lsort extrait lindexième élément de chaque sous liste et trie en se basant sur l'élément indiqué. Le mot-clé end est autorisé pour l'index à trier sur le dernier élément de la sous-liste. Par exemple, `lsort -integer -index 1 {{First 24} {Second 18} {Third 30}}` retourne `{Second 18} {First 24} {Third 30}`. Cette option est beaucoup plus efficace que l'utilisation de -command pour atteindre le même but.
* **-unique** Si cette option est spécifiée, alors seulement le dernier jeu d'éléments dupliqués trouvé dans la liste sera retenu. Notez que les doublons sont déterminés relativement à la comparaison utilisée dans le tri. Ainsi si -index 0 est utilisé, {1 a} et {1 b} seront considérés dupliqués et seulement le second élément, {1 b}, sera retenu.
===== Exemples =====
Voici la procédure //lshuffle// qui permet de rendre une liste aléatoire:
proc lshuffle {sorted} {
set shuffled {}
while { [llength $sorted] > 0} {
set j [expr {int(rand() * [llength $sorted])}]
lappend shuffled [lindex $sorted $j]
set sorted [lreplace $sorted $j $j]
}
return $shuffled
}
set abc {a b c d e f g h i j k l m n o p q r s t u v w x y z}
puts $abc
# a b c d e f g h i j k l m n o p q r s t u v w x y z
puts [lshuffle $abc]
# k z o v j a t u q p g f l d e n c y r i w b h s x m
puts [lshuffle $abc]
# p g l x c b r y h o t j z d q w s k a v i f n u m e
===== Voir aussi =====
[[:tcl:list]]
{{tag>tcl Listes}}