Calcoli nelle collezioni

Tradotto automaticamente da Deepl

Calcolare la media, il totale o il prezzo (tasse incluse) sono operazioni comuni in qualsiasi applicazione aziendale. Le raccolte sono un modo semplice per aggregare i dati in modo coerente. Con esse, questo tipo di calcolo diventa molto semplice, perché ci sono metodi di raccolta che fanno tutto per voi!

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 tutto ciò che si può fare con i metodi di raccolta!

Esempio di database: Gestire le collezioni

somma, media, min e max

È possibile calcolare la somma di tutti i valori di un insieme con il metodo sum con il metodo

// Calcolo della somma di tutti gli elementi di una collezione di valori numerici
$col:=Nuovacollezione(10000;50000;10500.5)
$vSum:=$col.sum() //$vSum=70500.5

// Calcolo della somma di tutti gli elementi di una collezione di oggetti
$col:=Nuovacollezione("nome"; "Smith"; "stipendio";10000)
$col.push(Nuovo oggetto("nome"; "Wesson"; "stipendio";50000))
$col.push(Nuovo oggetto("nome"; "Gross"; "stipendio";10500,5))
$vSum:=$col.sum("stipendio") //$vSum=70500,5

È possibile calcolare anche la media, il minimo e il massimo nello stesso modo, con metodi di raccolta con lo stesso nome.

Il metodo average restituisce la media aritmetica di tutti i valori dell’insieme:

$col:=Nuovacollezione(10000;50000;10500,5)
$vAvg:=$col.media() // $vAvg=23500,16666667

Il metodo min restituisce l’elemento con il valore più piccolo dell’insieme:

$col:=Nuovacollezione(10000;50000;10500.5)
$vMin:=$col.min() // $vMin=10000

Il metodo max restituisce l’elemento con il valore più alto dell’insieme:

$col:=Nuovacollezione(10000;50000;10500.5)
$vMax:=$col.max() // $vMax=50000

Contare gli elementi di una collezione

Se si vuole conoscere il numero di elementi contenuti in un insieme, è sufficiente utilizzare il metodo count per trovare il numero di elementi non nulli e length per il numero totale di elementi.

$col:=Newcollection(1;2;3;Null; "a"; "b";Null)
$length:=$col.length // $length=7 length è un attributo
$count:=$col.count() // $count=5 count è un metodo

È anche possibile contare il numero di volte in cui un valore specifico viene utilizzato nell’insieme, utilizzando il metodo countValues:

$col:=Nuovacollezione(1;2;5;5;3;6;4)
$vCount:=$col.countValues(5) // $vCount=3

Calcoli specifici

Altri due metodi di raccolta consentono di applicare un rich iamo a tutti gli elementi di una raccolta. In pratica, il metodo callback è uno dei metodi del progetto. Non è necessario scrivere un ciclo, 4D se ne occupa per voi:

Il metodo map applica il richiamo a ogni elemento dell’insieme e restituisce un insieme con tutti i nuovi elementi. Ad esempio, se si vuole calcolare la percentuale di ogni numero in una collezione in base alla somma totale, è facile usare map:

$c:=Nuovacollezione(1;4;9;10;20)
$c2:=$c.map("Percentuale";$c.sum()). // use Percentage as call back method
//$c2=[2.27,9.09,20.45,22.73,45.45]

dove Percentuale è un metodo di progetto come segue:

$1.risultato:=Round(($1.valore/$2)*100;2)

Il metodo reduce applica un callback a un accumulatore e a ogni elemento dell’insieme (da sinistra a destra) per ridurlo a un singolo elemento. Ad esempio, in un insieme con diversi prodotti misti, si potrebbe voler calcolare il totale di ogni prodotto. Il metodo reduce lo rende molto semplice:

$frutti:=Nuovacollezione("banana"; "ciliegia"; "arancia"; "mela"; "ciliegia"; "arancia"; "mela"; "banana"; "ciliegia"; "arancia"; "fico" )
$count:=$frutti.reduce("Tally";Nuovo oggetto) // use Tally as call back method
//$count={banana:2,ciliegia:3,arancia:3,mela:2,fico:1}

dove Tally è un metodo di progetto come segue:

// Cerca se un frutto con questo nome esiste già nella collezione di accumulatori
If ($1.accumulator[$1.value]#Null)
$1.accumulator[$1.value]:=$1.accumulator[$1.value]+1
Else
// Se non esiste già, crea un nuovo frutto
$1.accumulator[$1.value]:=1
End if

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à.