Mehrere Collections sortieren & synchronisieren

4D bietet leistungsstarke Funktionen für die Arbeit mit Objekt Collections. Sie können zum Beispiel eine Collection von Städten mit den dazugehörigen Ländern und Kontinenten erstellen. Die Bearbeitung dieser Collection mit integrierten Funktionen wie Sortieren, Ordnen und Filtern ist ein Kinderspiel.

4D v20 R3 führt die neue Funktion multiSort() ein, um diesen Prozess zu vereinfachen. Mit dieser Funktion können Sie nun problemlos mehrere Collections sortieren und synchronisieren.

Neue Funktion

Mit der neuen Funktion multiSort() können Sie eine mehrstufige, synchronisierte Sortierung für eine Reihe von Collections durchführen.

Wird die Funktion ohne Parameter aufgerufen, hat sie die gleiche Wirkung wie die Funktion .sort(). Standardmäßig wird die Collections (nur skalare Werte) in aufsteigender Reihenfolge nach ihrem Typ sortiert.

Wenn Sie die Collection in einer anderen Reihenfolge als aufsteigend sortieren möchten, müssen Sie eine Formel angeben.

$col.multiSort( [ $col2; $col3 ] )
$col .multiSort( $formula; [$col2; $col3] )

Es ist auch möglich, eine mehrstufige synchronisierte Sortierung zu definieren. Dies ist ähnlich wie der Befehl SORT MULTIPLE ARRAY.

In diesem Fall müssen Sie ein Objekt übergeben, das Auflistungs- und Ordnungsattribute enthält.

$col.multiSort( [ {collection: $col2; order: ck ascending} ; $col3 ] )
$col .multiSort( [ $formula; {collection: $col2; order: ck ascending} ; $col3 ] )

Außerdem gilt der Sortieralgorithmus als stabil, d. h. zwei Elemente mit demselben Wert erscheinen in der sortierten Ausgabe in derselben Reihenfolge wie im Eingabedatensatz.

Datenbank-Beispiel

Beispiele

Kehren wir zu unserem Beispiel für Stadt, Land und Kontinent zurück:

var $city : Collection
var $country : Collection
var $continent : Collection

$city :=["Paris"; "Lyon"; "Rabat"; "Eching"; "San Diego"]
$country :=["Frankreich"; "Frankreich"; "Marokko"; "Deutschland"; "USA"]
$continent :=["Europa"; "Europa"; "Afrika"; "Europa"; "Amerika"]

Beispiel 1: Eine einfache Sortierung der ersten Sammlung ($continent) mit Synchronisierung der anderen Collection ($country und $city)

$continent.multiSort([$country; $city])

Das Ergebnis ist:

"Afrika"; "Amerika"; "Europa"; "Europa"; "Europa" 
"Marokko"; "USA"; "Frankreich"; "Frankreich"; "Deutschland" 
"Rabat"; "San Diego"; "Paris"; "Lyon"; "Eching"

Beispiel 2: Aufsteigende Sortierung der ersten und der dritten Collection ($continent und $city), und Synchronisierung für die zweite Collection ($country)

$continent.multiSort($country; {collection: $city; order: ck ascending})

Das Ergebnis ist:

"Afrika"; "Amerika"; "Europa"; "Europa"; "Europa"
"Marokko"; "USA"; "Deutschland"; "Frankreich"; "Frankreich"
"Rabat"; "San Diego"; "Eching"; "Lyon"; "Paris"

Beispiel 3: Formelsortierung der ersten Sammlung ($continent) und Synchronisierung für die anderen Collection ($country und $city)

Die Formel im Beispiel ist einfach und erlaubt es Ihnen, in absteigender Reihenfolge zu sortieren. Aber wahrscheinlich haben Sie viele Ideen für komplexere Formeln, die Ihren Bedürfnissen entsprechen.

$continent.multiSort(Formula($1.value>$1.value2); [$country; $city])

Das Ergebnis ist:

"Europa"; "Europa"; "Europa"; "Amerika"; "Afrika"
"Frankreich"; "Frankreich"; "Deutschland"; "USA"; "Marokko"
"Paris"; "Lyon"; "Eching"; "San Diego"; "Rabat"

Beispiel 4: Mit komplexen Collections

Sie können es auch verwenden, um Collections von Objekten zu synchronisieren.


var $name : : :=[] . ({ : "John"; : "Smith"}) . ({ : "Alain"; : "Martin"}) . ({ : "Jane"; : "Doe"}) . ({ : "John"; : "Doe"}) :=[] .({ : "Paris"; : "Frankreich"}) . ({ : "Lyon"; : "Frankreich"}) . ({ : "Eching"; : "Deutschland"}) . ({ : "Berlin"; : "Deutschland"}) . ( ( . . < . . ); [ ) Collection
var $address Collection
$name
$namepushfirstname lastname
$namepushfirstname lastname
$namepushfirstname lastname
$namepushfirstname lastname
$address
$addresspushcity country
$addresspushcity country
$addresspushcity country
$addresspushcity country

$namemultiSortFormula$1valuefirstname$1value2firstname$address]

Das Ergebnis ist:

"Alain Martin"; "Jane Doe"; "John Smith"; "John Doe"
"Lyon Frankreich"; "Eching Deutschland"; "Paris Frankreich"; "Berlin Deutschland" 

Weiter…

Für weitere Informationen lesen Sie bitte die Dokumentation. Sie können Ihr Feedback und Ihre Anwendungsfälle im Forum mitteilen.

Vanessa Talbot
Product Owner - Vanessa Talbot kam im Juni 2014 zum 4D Programmteam. Als Product Owner ist sie für das Schreiben der User Stories und deren Umsetzung in funktionale Spezifikationen zuständig. Ihre Aufgabe ist es auch, sicherzustellen, dass die Implementierung der Funktionen den Anforderungen des Kunden entspricht. Seit ihrer Ankunft hat sie an der Definition der wichtigsten Funktionen in 4D gearbeitet. Sie hat an den meisten der neuen Funktionen für präemptives Multi-Threading gearbeitet und auch an einem sehr komplexen Thema: der neuen Architektur für erstellte Anwendungen. Vanessa hat einen Abschluss von der Telecom Saint-Etienne. Sie begann ihre Karriere am Criminal Research Institute als Entwicklerin für die audiovisuelle Abteilung. Sie hat auch in den Bereichen Medien und Medizin als Expertin für technischen Support, Produktion und die Dokumentation neuer Funktionen gearbeitet.