4D v19

collection.orderBy( )

Home

 
4D v19
collection.orderBy( )

collection.orderBy( )  


 

Die Funktion collection.orderBy( ) sortiert die Elemente der Collection und gibt eine neue sortierte Collection zurück.

Diese Funktion gibt eine flache Kopie (shallow copy) zurück, d.h. Objekte oder Collections der beiden Collections nutzen dieselbe Referenz. Ist die ursprüngliche Collection eine shared collection, ist die zurückgegebene Collection ebenfalls eine shared collection.

Hinweis: Diese Funktion ändert nicht die ursprüngliche Collection.

Ohne den Parameter Kriterium sortiert die Funktion nur skalare Werte der Collection in aufsteigender Reihenfolge, d.h. andere Elementtypen wie Objekte oder Collections werden unsortiert zurückgegeben. Für eine andere Sortierung können Sie im Parameter Kriterium entweder die Konstante ck ascending oder ck descending übergeben (siehe unten).

Über den Parameter Kriterium können Sie auch definieren, wie Collection Elemente sortiert werden. Es gibt drei Syntaxarten:

  • Kriterium ist vom Typ Text (Formel): "propertyPath1 {desc or asc}, propertyPath2 {desc or asc},..." (standardmäßig: asc)
    In diesem Fall enthält Kriterium eine Formel mit 1 bis x Eigenschaftspfaden und (optional) Sortierreihenfolgen, getrennt durch Kommas. Die Reihenfolge, in der die Eigenschaften übergeben sind, bestimmt die Priorität beim Sortieren der Collection Elemente.
    Eigenschaften werden standardmäßig in aufsteigender Reihenfolge sortiert. Sie können die Sortierreihenfolge im Eigenschaftspfad, getrennt durch ein Leerzeichen setzen: "asc" für aufsteigende Reihenfolge oder "desc" für absteigende Reihenfolge. 
  • Kriterium ist vom Typ Collection: Hier enthält jedes Element der Collection ein Objekt mit folgender Struktur:
    {"propertyPath": string,
    "descending": boolean}

    Eigenschaften werden standardmäßig in aufsteigender Reihenfolge sortiert. ("absteigend" ist falsch).
    In Kriterium können Sie soviel Objekte, wie erforderlich sind, hinzufügen.
  • Kriterium ist vom Typ Lange Ganzzahl: Hier können Sie eine Konstante unter dem Thema Objekte und Collections übergeben:
    Konstante Typ Wert Kommentar
    ck ascending Lange Ganzzahl 0 Elemente in aufsteigender Reihenfolge sortieren (Standard)
    ck descending Lange Ganzzahl 1 Elemente in absteigender Reihenfolge sortieren

    Diese Syntax sortiert nur skalare Werte in der Collection, d.h. andere Elementtypen wie Objekte oder Collections werden unsortiert zurückgegeben.

Enthält die Collection Elemente verschiedener Typen, werden sie zuerst nach Typ gruppiert und anschließend sortiert. Für die Typen gilt folgende Reihenfolge:

  1. Null
  2. Boolean
  3. Strings
  4. Zahl
  5. Objekt
  6. Collection
  7. Datum

Eine Collection mit Zahlen in aufsteigender und absteigender Reihenfolge sortieren:

 C_COLLECTION($c;$c2;$3)
 $c:=New collection
 For($vCounter;1;10)
    $c.push(Random)
 End for
 $c2:=$c.orderBy(ck ascending)
 $c3:=$c.orderBy(ck descending)

Eine Collection mit Objekten nach einer Textformel mit Eigenschaftennamen sortieren:

 C_COLLECTION($c)
 $c:=New collection
 For($vCounter;1;10)
    $c.push(New object("id";$vCounter;"value";Random))
 End for
 $c2:=$c.orderBy("value desc")
 $c2:=$c.orderBy("value desc, id")
 $c2:=$c.orderBy("value desc, id asc")

Eine Collection mit Objekten über einen Eigenschaftspfad sortieren:

 C_COLLECTION($c)
 $c:=New collection
 $c.push(New object("name";"Cleveland";"phones";New object("p1";"01";"p2";"02")))
 $c.push(New object("name";"Blountsville";"phones";New object("p1";"00";"p2";"03")))
 $c2:=$c.orderBy("phones.p1 asc")

 Eine Collection mit Objekten über eine Collection mit Kriterium Objekten sortieren:

 C_COLLECTION($crit;$c)
 $crit:=New collection
 $c:=New collection
 For($vCounter;1;10)
    $c.push(New object("id";$vCounter;"value";Random))
 End for
 $crit.push(New object("propertyPath";"value";"descending";True))
 $crit.push(New object("propertyPath";"id";"descending";False))
 $c2:=$c.orderBy($crit)

Mit einem Eigenschaftspfad sortieren:

 C_COLLECTION($crit;$c)
 $c:=New collection
 $c.push(New object("name";"Cleveland";"phones";New object("p1";"01";"p2";"02")))
 $c.push(New object("name";"Blountsville";"phones";New object("p1";"00";"p2";"03")))
 $crit:=New collection(New object("propertyPath";"phones.p2";"descending";True))
 $c2:=$c.orderBy($crit)



Siehe auch 

collection.orderByMethod()
collection.sort( )

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: Collections

Dieser Befehl kann in preemptive Prozessen laufen

 
SEITENINHALT 
 
GESCHICHTE 

 
ARTIKELVERWENDUNG

4D Programmiersprache ( 4D v19)
4D Programmiersprache ( 4D v19.1)