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