Combinare e ordinare le collezioni

Tradotto automaticamente da Deepl

4D v16 R6 opens a wide range of possibilities to manage collections. Merificare due collezioniin una, clonare o semplicemente ordinare una collezione è facile come chiamare un metodo. Si risparmia tempo prezioso, ad esempio, quando è necessario concatenare due collezioni, mantenere solo i valori distinti o ordinarli.

Questo articolo fa parte di una serie di dimostrazioni su come manipolare le collezioni utilizzando i metodi aggiunti in 4D v16 R6. Per saperne di più, scaricate il nostro esempio di database, che comprende 12 esempi diversi per mostrare cosa si può fare con i metodi delle collezioni!

Esempio di database: Gestire le raccolte

Copiare una collezione

Copia profonda

Il metodo copy restituisce una copia profonda dell’istanza della collezione. Una copia profonda significa che tutti gli elementi della collezione originale sono duplicati e non condividono alcun riferimento con la collezione restituita.

Nell’esempio seguente, l’esecuzione di una copia profonda con il metodo copy aggiunge un nuovo elemento a $col2 (a copy of the first collection – $col). An ulteriore elemento viene aggiunto a $col2, however $col remains unchanged:

//creare una collezione
$col
:=Nuovacollezione("a"; "b"; "c"; "d"; "e")
//fare una copia profonda della prima collezione
$col2:=$col.copy($col)
//aggiunge un nuovo elemento alla copia del primo insieme
$col2.push("f")
// $col=["a", "b", "c", "d, "e"]

// $col2=["a", "b", "c", "d, "e", "f"]

Copia superficiale

Quando si esegue una copia superficiale di un insieme, gli elementi dell’insieme originale condividono i loro riferimenti con l’insieme restituito. Per esempio, se si crea una collezione, se ne fa una tipica copia superficiale e poi si aggiunge un nuovo elemento alla copia ($col2)), anche l’insieme originale ($col) rifletterà la modifica perché $col e $col2 condividono il loro riferimento:

//creare una collezione
$col
:=Newcollection("a"; "b"; "c"; "d"; "e")
//fare una copia superficiale della prima collezione
$col2:=$col

//aggiungere un nuovo elemento alla copia della prima collezione

$col2.push("f")
// $col2=$col=["a", "b", "c", "d, "e", "f"]

È possibile creare una copia superficiale di una parte di un insieme utilizzando il metodo slice :

//create a collection
$col
:=New collection("a"; "b"; "c"; "d"; "e")
// Copy from index 2 and stop at end of collection -1
$col2 :=$col.slice(2;-1)
//$col2=[c,d]

Combinazione di collezioni

La concatenazione di due raccolte può essere effettuata utilizzando il metodo concat o combine o il metodo

Il metodo concat restituisce un nuovo insieme con la concatenazione dei due insiemi:

//create 2 collections
$col
:=Nuovacollezione("a"; "b"; "c")
$col2:=Nuovacollezione(1;2;3)
//combina le 2 collezioni in una terza collezione
$col3:=$col.concat($col2)
//$col3=["a", "b", "c",1,2,3]

Il metodo combine aggiunge ogni elemento di un insieme (passato come parametro) alla fine dell’insieme originale:

//create 2 collections
$col
:=Nuovacollezione("a"; "b"; "c")
$col2:=Nuovacollezione(1;2;3)
//aggiunge la seconda collezione alla fine della prima
$col.combine($col2)
//$col=["a", "b", "c",1,2,3]

Il metodo distinct crea un nuovo insieme contenente solo valori distinti (diversi) dall’insieme originale:

$col:=New collection("a"; "b"; "c"; "a"; "b"; "c"; "d"; "e")
$col2 :=$col.distinct()
//$col2=[a,b,c,d,e]

Ordinamento di una collezione

Per ordinare un insieme, si possono usare i metodi sort o orderBy . Il metodo sort modifica l’insieme originale, mentre orderBy restituisce un insieme ordinato completamente nuovo (copia superficiale), ma non modifica l’insieme originale:

$col:=Nuovacollezione("a"; "b"; "c"; "a"; "b"; "c"; "d"; "e")
$col2:=$col.

orderBy
()
//$col2=["a", "a", "b", "b", "c", "c", "d", "e"]
//$col=["a", "b", "c", "a", "b", "c", "d", "e"]
$col.sort()
//$col=["a", "a", "b", "b", "c", "c", "d", "e"]

È anche possibile ordinare un insieme usando sort o orderByMethodche richiede un metodo di richiamo:

$col:=Newcollection("Orange"; "Apple"; "Grape"; "Pear"; "Banana"; "Fig"; "Blackberry"; "Passion fruit")
$col2:=$col.orderByMethod("WordLength")
//$col2=[Frutto della passione,Mora,Arancia,Banana,Mela,Uva,Pera,Fico]
$col.sort("WordLength")
//$col=[Frutto della passione,Mora,Arancia,Banana,Mela,Uva,Pera,Fico]

Dove il metodo di callback WordLength è uno dei metodi del progetto:

$1.risultato:=Lunghezza(String($1.valore))>Lunghezza(String($1.valore2))

Infine, è possibile creare una copia profonda di un insieme con tutti i suoi elementi in ordine inverso, utilizzando il metodo reverse:

$col:=Nuovacollezione(1;3;5;2;4;6)
$col2:=$col.reverse()
//$c2=[6,4,2,5,3,1]

Fabrice Mainguené
- Product Owner -Fabrice Mainguené si è unito al team di 4D Program nel novembre 2016. In qualità di Product Owner, è incaricato 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.Dopo aver conseguito una laurea in Informatica presso il CNAM, Fabrice è entrato a far parte di una piccola società di pubblicazione di software come sviluppatore Windev. In seguito ha lavorato per diverse aziende del settore industriale e commerciale come sviluppatore Windev e web e come consulente tecnico su nuove funzionalità.