CustomSortList()
Syntax
CustomSortList(ListenName(), @CompareProcedure() [, Optionen [, Start, Ende]])Beschreibung
Sortiert die angegebene Liste entsprechend den angegebenen Optionen unter Verwendung einer benutzerdefinierten Prozedur zum Vergleichen von Listen-Elementen.
Die Liste kann eine Struktur oder einen der Basistypen haben: Byte, Word, Long, Integer, String oder Float.
Parameter
ListenName() Die zu sortierende Liste. @CompareProcedure() Die Adresse einer Prozedur zum Vergleichen der Listen-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 die Liste in aufsteigender Richtung (kleine Zahlen zuerst). Dies ist der Standard. #PB_Sort_Descending: Sortiert die Liste in absteigender Richtung (große Zahlen zuerst).Start, Ende (optional) Der Index des ersten und letzten Elements in der Liste, die sortiert werden sollen. Wenn diese Parameter nicht angegeben werden, wird die gesamte Liste sortiert.
Das erste Listenelement steht an Position 0, das nächste an Position 1 und so weiter.
Rückgabewert
Diese Funktion gibt keinen Wert zurück.
Beispiel: Strukturierte Liste 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 NewList Test.CustomStruct() AddElement(Test()) : Test()\Value$ = "0005" AddElement(Test()) : Test()\Value$ = "2" AddElement(Test()) : Test()\Value$ = "42" AddElement(Test()) : Test()\Value$ = "7" AddElement(Test()) : Test()\Value$ = "23" AddElement(Test()) : Test()\Value$ = "100" AddElement(Test()) : Test()\Value$ = "101" CustomSortList(Test(), @CustomCompare(), #PB_Sort_Ascending) ForEach Test() Debug Test()\Value$ Next
Beispiel: Liste 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 NewList Test.f() AddElement(Test()) : Test() = 2.5 AddElement(Test()) : Test() = -3.0 AddElement(Test()) : Test() = 0 AddElement(Test()) : Test() = 12 AddElement(Test()) : Test() = -100 CustomSortList(Test(), @AbsCompare()) ForEach Test() Debug Test() Next
Siehe auch
SortList(), SortStructuredList(), RandomizeList()
Unterstützte OS
Alle