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