Eggdrop & Tcl

Base de connaissances eggdrop et tcl

Outils pour utilisateurs

Outils du site


tcl:lsort

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/lsort.txt · Dernière modification : 2024/05/12 15:54 de crazycat