CustomSortList()

Syntaxe

CustomSortList(Liste(), @ProcedureCompare() [, Options [, Debut, Fin]])
Description
Trie la liste selon les options données à l'aide d'une procédure personnalisée pour comparer les éléments du tableau.

Arguments

Liste() La liste à trier.
@ProcedureCompare() L'adresse de la procédure pour comparer les éléments de la liste. La procédure doit avoir deux paramètres qui recevront l'adresse mémoire des deux éléments à comparer et renvoyer l'une des valeurs suivantes :
   #PB_Sort_Greater : Le premier élément est supérieur au second.
   #PB_Sort_Equal   : Les deux éléments sont égaux.
   #PB_Sort_Lesser  : Le premier élément est inférieur au second.
La procédure de comparaison est appelée très souvent pendant le processus de tri, elle doit donc effectuer le moins de travail possible et être rapide à exécuter.
Options (optionnel) Il peut s'agir d'une combinaison des valeurs suivantes :
   #PB_Sort_Ascending  : Trie la liste par ordre croissant (les valeurs les plus basses en premier). C'est la valeur par défaut.
   #PB_Sort_Descending : Trie la liste par ordre décroissant (les valeurs les plus élevées en premier)
Debut, Fin (optionnel) L'index du premier et du dernier élément de la liste qui doit être trié. Si ces paramètres ne sont pas spécifiés, alors toute la liste est triée.
Le premier élément de la liste est à la position 0, le suivant à 1 et ainsi de suite.

Valeur de retour

Aucune.

Remarques

La liste peut avoir une structure ou l'un des types de base : Octet, mot, long, entier, chaîne ou flottant (byte, word, long, integer, string ou float).

Exemple: Trier la liste structurée

   Structure CustomStruct
     Valeur$
   EndStructure
  
   ; Trier par valeur numérique dans l'élément chaîne de la structure
    Procedure CustomCompare(*a.CustomStruct, *b.CustomStruct)
    If Val(*a\Valeur$) < Val(*b\Valeur$)
      ProcedureReturn #PB_Sort_Lesser
    ElseIf Val(*a\Valeur$) > Val(*b\Valeur$)
      ProcedureReturn #PB_Sort_Greater
    Else
      ProcedureReturn #PB_Sort_Equal
    EndIf
  EndProcedure
  
  NewList Test.CustomStruct()
  
   AddElement(Test()) : Test()\Valeur$ = "0005"
   AddElement(Test()) : Test()\Valeur$ = "2"
   AddElement(Test()) : Test()\Valeur$ = "42"
   AddElement(Test()) : Test()\Valeur$ = "7"
   AddElement(Test()) : Test()\Valeur$ = "23"
   AddElement(Test()) : Test()\Valeur$ = "100"
   AddElement(Test()) : Test()\Valeur$ = "101"
  
   CustomSortList(Test(), @CustomCompare(), #PB_Sort_Ascending)
  
  ForEach Test()
    Debug Test()\Valeur$
  Next

Exemple: Trier la liste avec un type de base

   ; Trier les éléments flottants par valeur absolue (en ignorant le signe)
   Procedure AbsCompare(*a.Float, *b.Float)
    If Abs(*a\f) < Abs(*b\f)
      ProcedureReturn #PB_Sort_Lesser
    ElseIf Abs(*a\f) > Abs(*b\f)
      ProcedureReturn #PB_Sort_Greater
    Else
      ProcedureReturn #PB_Sort_Equal
    EndIf
  EndProcedure
  
  NewList Test.f()
   AddElement(Test()):Test() = 2.5
   AddElement(Test()):Test() = -3.0
   AddElement(Test()):Test() = 0
   AddElement(Test()):Test() = 12
   AddElement(Test()):Test() = -100
  
  CustomSortList(Test(), @AbsCompare())
  
  ForEach Test()
    Debug Test()
  Next

Voir aussi

SortList(), SortStructuredList(), RandomizeList()

OS Supportés

Tous

<- CustomSortArray() - Sort Index - RandomizeArray() ->