Výpočty ve sbírkách

Automaticky přeloženo z Deepl

Výpočet průměru, celkové částky nebo ceny (včetně daně) jsou běžné úlohy v každé obchodní aplikaci. Sbírky představují snadný způsob, jak konzistentně agregovat data. Díky nim se tento typ výpočtu stává velmi jednoduchým, protože existují metody kolekcí, které vše udělají za vás!

Tento článek je součástí seriálu, který ukazuje, jak manipulovat s kolekcemi pomocí metod přidaných na 4D v16 R6. Chcete-li se dozvědět ještě více, stáhněte si náš databázový příklad, který obsahuje 12 různých příkladů ukazujících, co všechno můžete s metodami kolekcí dělat!

Příklad databáze: Správa kolekcí

součet, průměr, min a max

Součet všech hodnot v kolekci můžete vypočítat pomocí příkazu sum metodou:

// Vypočítejte součet všech prvků v kolekci číselných hodnot
$col:=Novákolekce(10000;50000;10500.5)
$vSum:=$col.sum() //$vSum=70500.5

// Vypočítejte součet všech prvků v kolekci objektů
$col:=Novákolekce("jméno"; "Smith"; "plat";10000)
$col.push(Nový objekt("jméno"; "Wesson"; "plat";50000))
$col.push(Nový objekt("jméno"; "Gross"; "plat";10500.5))
$vSum:=$col.sum("plat") //$vSum=70500.5

Stejným způsobem můžete vypočítat také průměr, min a max pomocí stejnojmenných metod kolekce.

The average Metoda vrací aritmetický průměr (průměr) všech hodnot kolekce:

$col:=Novákolekce(10000;50000;10500.5)
$vAvg:=$col.average() // $vAvg=23500.16666667

. min metoda vrací prvek s nejmenší hodnotou v kolekci:

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

. max metoda vrací prvek s nejvyšší hodnotou v kolekci:

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

Počítání prvků v kolekci

Pokud chcete zjistit počet prvků, které kolekce obsahuje, stačí použít příkaz count zjistit počet prvků, které nejsou nulové, a length pro celkový počet prvků.

$col:=Newcollection(1;2;3;Null; "a"; "b";Null)
$length:=$col.length // $length=7 length je atribut
$count:=$col.count() // $count=5 count je metoda

Můžete také spočítat, kolikrát je v kolekci použita určitá hodnota, a to pomocí funkce countValues:

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

Specifické výpočty

Další dvě metody kolekce umožňují použít zpětné volání na všechny prvky kolekce. Metoda zpětného volání je v podstatě jednou z metod vašeho projektu. Nemusíte psát smyčku, 4D se o to postará za vás:

. map metoda použije zpětné volání na každý prvek kolekce a vrátí kolekci se všemi novými prvky. Pokud například potřebujete vypočítat procenta pro každé číslo v kolekci podle celkového součtu, je to snadné pomocí map:

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

kde Procento je metoda projektu, jak je uvedeno níže:

$1.result:=Round(($1.value/$2)*100;2)

. reduce metoda použije zpětné volání proti akumulátoru a každému prvku kolekce (zleva doprava), aby ji zredukovala na jediný prvek. Například v kolekci s několika smíšenými produkty můžete chtít vypočítat součet každého produktu. Na adrese reduce je to velmi jednoduché:

$fruits:=Novákolekce("banán"; "třešeň"; "pomeranč"; "jablko"; "třešeň"; "pomeranč"; "jablko"; "banán"; "třešeň"; "pomeranč"; "fík" )
$count:=$fruits.reduce("Tally";Nový objekt) // use Tally as call back method
//$count={banán:2,třešeň:3,pomeranč:3,jablko:2,fík:1}

kde Tally je metoda projektu následujícím způsobem:

// Hledejte, zda ovoce s tímto názvem již existuje v kolekci akumulátorů
If ($1.akumulátor[$1.hodnota]#Null)
$1.akumulátor[$1.hodnota]:=$1.akumulátor[$1.hodnota]+1
Else
// Pokud ještě neexistuje, vytvořte nové ovoce
$1.akumulátor[$1.hodnota]:=1
End if

Fabrice Mainguené
- Product Owner -Fabrice Mainguené se připojil k týmu 4D Program v listopadu 2016. Jako Product Owner má na starosti psaní uživatelských příběhů, které následně převádí do funkčních specifikací. Jeho úkolem je také zajistit, aby dodaná implementace funkcí splňovala potřeby zákazníků.Po získání bakalářského titulu v oboru informatiky na CNAM nastoupil Fabrice do malé softwarové vydavatelské společnosti jako vývojář Windev. Poté pracoval pro různé společnosti v oblasti průmyslu a obchodu jako vývojář aplikací Windev a webových aplikací a také jako technický poradce pro nové funkce.