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