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

Sort Index - CustomSortList() ->