CustomSortArray()

Syntax

CustomSortArray(ArrayName(), @CompareProcedure() [, Optionen [, Start, Ende]])
Beschreibung
Sortiert das angegebene Array entsprechend den angegebenen Optionen unter Verwendung einer benutzerdefinierten Prozedur zum Vergleichen von Array-Elementen.
Das Array kann eine Struktur oder einen der Basistypen haben: Byte, Word, Long, Integer, String oder Float. Mehrdimensionale Arrays werden nicht unterstützt.

Parameter

ArrayName() Das zu sortierende Array.
@CompareProcedure() Die Adresse einer Prozedur zum Vergleichen der Array-Elemente. Die Prozedur muss über zwei Parameter verfügen, die die Speicheradressen der beiden zu vergleichenden Elemente empfangen, und sie muss einen der folgenden Werte zurückgeben:
  #PB_Sort_Greater: Das erste Element ist größer als das zweite.
  #PB_Sort_Equal  : Beide Elemente sind gleich.
  #PB_Sort_Lesser : Das erste Element ist kleiner als das zweite.
Die Vergleichsprozedur wird während des Sortiervorgangs sehr oft aufgerufen, daher sollte sie möglichst wenig Arbeit erledigen und schnell ausgeführt werden können.
Optionen (optional) Dies kann eine Kombination der folgenden Werte sein:
  #PB_Sort_Ascending : Sortiert das Array in aufsteigender Richtung (kleine Zahlen zuerst). Dies ist der Standard.
  #PB_Sort_Descending: Sortiert das Array in absteigender Richtung (große Zahlen zuerst).
Start, Ende (optional) Der Index des ersten und letzten Elements im Array, die sortiert werden sollen. Wenn diese Parameter nicht angegeben werden, wird das gesamte Array sortiert.

Rückgabewert

Diese Funktion gibt keinen Wert zurück.

Beispiel: Strukturiertes Array sortieren

  Structure CustomStruct
    Value$
  EndStructure
  
  ; Nach numerischem Wert im String-Element der Struktur sortieren
  Procedure CustomCompare(*a.CustomStruct, *b.CustomStruct)
    If Val(*a\Value$) < Val(*b\Value$)
      ProcedureReturn #PB_Sort_Lesser
    ElseIf Val(*a\Value$) > Val(*b\Value$)
      ProcedureReturn #PB_Sort_Greater
    Else
      ProcedureReturn #PB_Sort_Equal
    EndIf
  EndProcedure
  
  Dim Test.CustomStruct(6)
  
  Test(0)\Value$ = "0005"
  Test(1)\Value$ = "2"
  Test(2)\Value$ = "42"
  Test(3)\Value$ = "7"
  Test(4)\Value$ = "23"
  Test(5)\Value$ = "100"
  Test(6)\Value$ = "101"
  
  CustomSortArray(Test(), @CustomCompare(), #PB_Sort_Ascending)
  
  For i = 0 To 6
    Debug Test(i)\Value$
  Next

Beispiel: Array mit Basistyp sortieren

  ; Float-Elemente nach absolutem Wert (ohne Berücksichtigung des Vorzeichens) sortieren
  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

Siehe auch

SortArray(), SortStructuredArray(), RandomizeArray()

Unterstützte OS

Alle

Sort Inhaltsverzeichnis - CustomSortList() ->