CustomSortArray()
Syntaxe
CustomSortArray(Tableau(), @ProcedureCompare() [, Options [, Debut, Fin]])Description
Trie le tableau selon les options données par une procédure personnalisée pour comparer les éléments du tableau.
Arguments
Tableau() Le tableau à trier. @ProcedureCompare() L'adresse d'une procédure pour comparer les éléments du tableau. 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 le tableau par ordre croissant (les valeurs les plus basses en premier). C'est la valeur par défaut. #PB_Sort_Descending : Trie le tableau par ordre décroissant (les valeurs les plus élevées en premier)Debut, Fin (optionnel) L'index du premier et du dernier élément du tableau qui doit être trié.
Si ces paramètres ne sont pas spécifiés alors tout le tableau est trié.
Valeur de retour
Aucune.
Remarques
Le tableau 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). Les tableaux multidimensionnels ne sont pas pris en charge.
Exemple: Trier un tableau structuré
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 Dim Test.CustomStruct(6) Test(0)\Valeur$ = "0005" Test(1)\Valeur$ = "2" Test(2)\Valeur$ = "42" Test(3)\Valeur$ = "7" Test(4)\Valeur$ = "23" Test(5)\Valeur$ = "100" Test(6)\Valeur$ = "101" CustomSortArray(Test(), @CustomCompare(), #PB_Sort_Ascending) For i = 0 To 6 Debug Test(i)\Valeur$ Next i
Exemple: Trier un tableau 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 Dim Test.f(4) Test(0) = 2.5 Test(1) = -3.0 Test(2) = 0 Test(3) = 12 Test(4) = -100 CustomSortArray(Test(), @AbsCompare()) For i = 0 To 4 Debug Test(i) Next i
Voir aussi
SortArray(), SortStructuredArray(), RandomizeArray()
OS Supportés
Tous