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