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

<- CustomSortArray() - Sort Inhaltsverzeichnis - RandomizeArray() ->