Eggdrop & Tcl

Base de connaissances eggdrop et tcl

Outils pour utilisateurs

Outils du site


tcl:lsort

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
tcl:lsort [2023/10/11 16:12] – créée CrazyCattcl:lsort [2025/03/10 14:11] (Version actuelle) crazycat
Ligne 16: Ligne 16:
   * **-increasing** Trie la liste en ordre croissant ("plus petit" articles en premier). Par défaut.   * **-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).   * **-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.+  * **-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, `<nowiki>lsort -integer -index 1 {{First 24} {Second 18} {Third 30}}</nowiki>` 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.   * **-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 ===== ===== Exemples =====
 +Voici la procédure //lshuffle// qui permet de rendre une liste aléatoire:
 +<code tcl>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</code>
  
 +Un autre exemple utilisant **-index**:
 +
 +<code tcl># list of users: nick, words, lines
 +set random {
 +   {albert 45 8}
 +   {hector 4 2}
 +   {gwenaelle 84 18}
 +   {myriam 64 4}
 +}
 +
 +proc order {ulist {type ""}} {
 +   switch -nocase $type {
 +      words { set idx 1; set opt "-integer" }
 +      lines { set idx 2; set opt "-integer" }
 +      default { set idx 0; set opt "-nocase" }
 +   }
 +   return [lsort $opt -index $idx $::random]
 +}
 +
 +puts "order by names"
 +foreach l [order $random] {
 +   puts "[lindex $l 0] as [lindex $l 1] words and [lindex $l 2] lines"
 +}
 +
 +puts "order by words"
 +foreach l [order $random words] {
 +   puts "[lindex $l 0] as [lindex $l 1] words and [lindex $l 2] lines"
 +}
 +
 +puts "order by lines"
 +foreach l [order $random lines] {
 +   puts "[lindex $l 0] as [lindex $l 1] words and [lindex $l 2] lines"
 +}</code>
 ===== Voir aussi ===== ===== Voir aussi =====
 [[:tcl:list]] [[:tcl:list]]
 {{tag>tcl Listes}} {{tag>tcl Listes}}
  
tcl/lsort.1697040750.txt.gz · Dernière modification : 2023/10/11 16:12 de CrazyCat