Sincronizzare più collezioni con questa nuova funzione

Tradotto automaticamente da Deepl

4D offre potenti funzioni per lavorare con collezioni di oggetti. Ad esempio, è possibile creare una collezione di città con i relativi paesi e continenti. La manipolazione di queste raccolte con le funzioni integrate come l’ordinamento, l’ordine e il filtro diventa un gioco da ragazzi.

4D v20 R3 introduce la nuova funzione multiSort() per semplificare questo processo. Con questa funzione è ora possibile ordinare e sincronizzare facilmente più raccolte.

Nuova funzione

La nuova funzione multiSort() consente di eseguire un ordinamento sincronizzato a più livelli su un insieme di raccolte.

Se la funzione viene chiamata senza parametri, ha lo stesso effetto della funzione .sort(). Per impostazione predefinita, l’insieme viene ordinato (solo per i valori scalari) in ordine crescente, in base al loro tipo.

Se si desidera ordinare le collezioni in un ordine diverso da quello ascendente, è necessario fornire una formula.

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

È anche possibile definire un ordinamento sincronizzato a più livelli. È simile al comando SORT MULTIPLE ARRAY.

In questo caso, è necessario passare un oggetto contenente gli attributi della collezione e dell’ordine.

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

Inoltre, l’algoritmo di ordinamento è detto stabile, cioè due elementi con lo stesso valore appaiono nello stesso ordine nell’output ordinato come nel set di dati di input.

Esempio di database

Esempi

Torniamo al nostro esempio di città, paese e continente:

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

$city :=["Parigi"; "Lione"; "Rabat"; "Eching"; "San Diego"]
$country :=["Francia"; "Francia"; "Marocco"; "Germania"; "Stati Uniti"]
$continent :=["Europa"; "Europa"; "Africa"; "Europa"; "America"]

Esempio 1: Un semplice ordinamento della prima collezione ($continent) con la sincronizzazione delle altre collezioni ($country e $city)

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

Il risultato è:

"Africa"; "America"; "Europa"; "Europa"; "Europa". 
"Marocco"; "USA"; "Francia"; "Francia"; "Germania" 
"Rabat"; "San Diego"; "Parigi"; "Lione"; "Eching".

Esempio 2: ordinamento ascendente della prima e della terza collezione ($continent e $city), e sincronizzazione per la seconda collezione ($country)

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

Il risultato è:

"Africa"; "America"; "Europa"; "Europa"; "Europa".
"Marocco"; "Stati Uniti"; "Germania"; "Francia"; "Francia"
"Rabat"; "San Diego"; "Eching"; "Lione"; "Parigi".

Esempio 3: Formula di ordinamento della prima collezione ($continent) e sincronizzazione per le altre collezioni ($country e $city)

La formula dell’esempio è semplice e consente di ordinare in ordine decrescente. Ma probabilmente avete molte idee per formule più complesse, adatte alle vostre esigenze.

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

Il risultato è:

"Europa"; "Europa"; "Europa"; "America"; "Africa".
"Francia"; "Francia"; "Germania"; "USA"; "Marocco"
"Parigi"; "Lione"; "Eching"; "San Diego"; "Rabat".

Esempio 4: Con collezioni complesse

Si può usare anche per sincronizzare collezioni di oggetti.


var $name : : :=[] . ({ : "John"; : "Smith"}) . ({ : "Alain"; : "Martin"}) . ({ : "Jane"; : "Doe"}) . ({ : "John"; : "Doe"}) :=[] .({ : "Parigi"; : "Francia"}) . ({ : "Lione"; : "Francia"}) . ({ : "Eching"; : "Germania"}) . ({ : "Berlino"; : "Germania"}) . ( ( . . < . . ); [ ) 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]

Il risultato è:

"Alain Martin"; "Jane Doe"; "John Smith"; "John Doe".
"Lione Francia"; "Eching Germania"; "Parigi Francia"; "Berlino Germania". 

Avanti…

Per ulteriori informazioni, consultare la documentazione. Potete condividere il vostro feedback e i vostri casi d’uso sul forum.

Vanessa Talbot
- Product Owner - Vanessa Talbot è entrata a far parte del team di 4D Program nel giugno 2014. In qualità di Product Owner, è incaricata di scrivere le storie degli utenti e di tradurle in specifiche funzionali. Il suo ruolo è anche quello di assicurarsi che l'implementazione della funzionalità fornita soddisfi le esigenze del cliente. Ha lavorato sulla maggior parte delle nuove funzionalità di multi-threading preemptive e anche su un argomento molto complesso: la nuova architettura per le applicazioni con motore. Vanessa si è laureata presso Telecom Saint-Etienne. Ha iniziato la sua carriera presso il Criminal Research Institute come sviluppatrice per il dipartimento audiovisivo. Ha lavorato anche nei settori dei media e della medicina come esperta di supporto tecnico, produzione e documentazione di nuove funzionalità.