Cálculos em colecções

Tradução automática de Deepl

Calcular a média, total ou preço (incluindo impostos) são tarefas comuns em qualquer aplicação comercial. As colecções são uma forma fácil de agregar os seus dados de uma forma consistente. Com ele, este tipo de cálculo torna-se muito simples, porque existem métodos de recolha que fazem tudo por si!

Este artigo faz parte de uma série que demonstra como manipular as colecções utilizando os métodos adicionados em 4D v16 R6. Para saber ainda mais, descarregue o nosso exemplo de base de dados, que inclui 12 exemplos diferentes para mostrar tudo o que pode fazer com os métodos de recolha!

Exemplo de base de dados: Gerir colecções

soma, média, mín. e máx.

Pode calcular a soma de todos os valores de uma colecção com o sum método:

// Calcular soma de todos os elementos de uma colecção de valores numéricos
$col:=Novacolecção(10000;50000;10500.5)
$vSum:=$col.sum() //$vSum=70500.5

// Calcular soma de todos os elementos de uma colecção de objectos
$col:=Novacolecção("nome"; "Smith"; "salário";10000)
$col.push(Novo objecto("nome"; "Wesson"; "salário";50000))
$col.push(Novo objecto("nome"; "Gross"; "salário";10500.5))
$vSum:=$col.sum("salário") //$vSum=70500.5

Pode também calcular a média, min e max da mesma forma, com métodos de recolha com o mesmo nome.

O average O método devolve a média aritmética (média) de todos os valores da colecção:

$col:=Novacolecção(10000;50000;10500.5)
$vAvg:=$col.média() // $vAvg=23500.16666667

O min devolve o elemento com o menor valor da colecção:

$col:=Novacolecção(10000;50000;10500.5)
$vMin:=$col.min() // $vMin=10000

O max devolve o elemento com o maior valor na colecção:

$col:=Novacolecção(10000;50000;10500.5)
$vMax:=$col.max() // $vMax=50000

Contar elementos de uma colecção

Se quiser saber o número de elementos que uma colecção contém, basta utilizar count para encontrar o número de elementos não-nulos e length para o número total de elementos.

$col:=Novacolecção(1;2;3;Nula; "a"; "b";Nula)
$length:=$col.comprimento // $length=7 comprimento é um atributo
$count:=$col.contagem() // $count=5 contagem é um método

Pode também contar o número de vezes que um valor específico é utilizado na sua colecção usando countValues:

$col:=Novacolecção(1;2;5;5;5;3;6;4)
$vCount:=$col.countValues(5) // $vCount=3

Cálculos específicos

Dois outros métodos de colecção permitem-lhe aplicar uma chamada de volta sobre todos os elementos de uma colecção. Basicamente, o método de chamada de retorno é um dos seus métodos de projecto. Não há necessidade de escrever um laço, 4D cuida dele por si:

O map aplica a chamada de volta em cada elemento da colecção e devolve uma colecção com todos os novos elementos. Por exemplo, se for necessário calcular a percentagem para cada número de uma colecção de acordo com o total da soma, é fácil utilizar map:

$c:=Novacolecção(1;4;9;10;20)
$c2:=$c.mapa("Percentagem";$c.soma()). // use Percentage as call back method
//$c2=[2.27,9.09,20.45,22.73,45.45]

onde Percentagem é um método de projecto como se segue:

$1.resultado:=Round(($1.valor/$2)*100;2)

O : é fácil. reduce aplica um método de retorno contra um acumulador e cada elemento da colecção (da esquerda para a direita) para o reduzir a um único elemento. Por exemplo, numa colecção com vários produtos mistos, pode querer calcular a contagem de cada produto. O reduce torna o método muito simples:

$fruits:=Novacolecção("banana"; "cereja"; "laranja"; "maçã"; "cereja"; "laranja"; "maçã"; "banana"; "cereja"; "laranja"; "figo" )
$count:=$fruits.reduce("Tally";Novo objecto) // use Tally as call back method
//$count={banana:2,cereja:3,laranja:3,maçã:2,figo:1}

onde Tally é um método de projecto como se segue:

// Pesquisar se uma fruta com este nome já existe na colecção de acumuladores
If ($1.accumulator[$1.value]#Null)
$1.accumulator[$1.value]:=$1.accumulator[$1.value]+1
Else
// Se ainda não existir, criar uma nova fruta
$1.accumulator[$1.value]:=1
Terminar se

Fabrice Mainguené
- Proprietário do produto ->p>Fabrice Mainguené juntou-se à equipa do Programa 4D em Novembro, 2016. Como Proprietário do Produto, está encarregado de escrever as histórias dos utilizadores, traduzindo-as depois para especificações funcionais. O seu papel é também o de assegurar que a implementação da funcionalidade entregue vai ao encontro das necessidades do cliente.Após a obtenção da licenciatura em Informática no CNAM, Fabrice juntou-se a uma pequena empresa editora de software como programador Windev. Depois trabalhou para diferentes empresas nas áreas da indústria e comércio como programador Windev e web developer, bem como como consultor técnico sobre novas funcionalidades.