Berechnungen in Sammlungen

Automatisch übersetzt von Deepl

Durchschnitts-, Gesamt- oder Preisberechnungen (einschließlich Steuern) sind gängige Aufgaben in jeder Geschäftsanwendung. Sammlungen sind ein einfacher Weg, um Ihre Daten auf konsistente Weise zu aggregieren. Mit ihnen wird diese Art der Berechnung sehr einfach, denn es gibt Sammlungsmethoden, die alles für Sie erledigen!

Dieser Artikel ist Teil einer Serie, in der gezeigt wird, wie man Sammlungen mit den in 4D v16 R6 hinzugefügten Methoden manipuliert. Um noch mehr zu erfahren, laden Sie unser Datenbankbeispiel herunter, das 12 verschiedene Beispiele enthält, um zu zeigen, was Sie mit Auflistungsmethoden alles machen können!

Datenbank-Beispiel: Verwalten von Sammlungen

Summe, Durchschnitt, Min und Max

Sie können die Summe aller Werte in einer Sammlung mit der sum Methode berechnen:

// Berechnen der Summe aller Elemente in einer Sammlung numerischer Werte
$col:=NeueSammlung(10000;50000;10500.5)
$vSum:=$col.sum() //$vSum=70500.5

// Berechnen der Summe aller Elemente in einer Sammlung von Objekten
$col:=NeueSammlung("Name"; "Smith"; "Gehalt";10000)
$col.push(Neues Objekt("Name"; "Wesson"; "Gehalt";50000))
$col.push(Neues Objekt("Name"; "Brutto"; "Gehalt";10500.5))
$vSum:=$col.sum("Gehalt") //$vSum=70500.5

Auf die gleiche Weise können Sie auch den Durchschnitt, das Minimum und das Maximum mit den gleichnamigen Sammelmethoden berechnen.

Die Methode average Methode gibt das arithmetische Mittel (Durchschnitt) aller Werte der Sammlung zurück:

$col:=NeueSammlung(10000;50000;10500.5)
$vAvg:=$col.average() // $vAvg=23500.16666667

Die Methode min Methode gibt das Element mit dem kleinsten Wert in der Sammlung zurück:

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

Die Methode max Methode gibt das Element mit dem höchsten Wert in der Sammlung zurück:

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

Elemente in einer Sammlung zählen

Wenn Sie wissen wollen, wie viele Elemente eine Sammlung enthält, verwenden Sie einfach count um die Anzahl der Nicht-Null-Elemente zu ermitteln und length für die Gesamtzahl der Elemente.

$col:=Newcollection(1;2;3;Null; "a"; "b";Null)
$length:=$col.length // $length=7 length ist ein Attribut
$count:=$col.count() // $count=5 count ist eine Methode

Sie können auch zählen, wie oft ein bestimmter Wert in Ihrer Sammlung vorkommt, indem Sie countValues:

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

Spezifische Berechnungen

Zwei weitere Auflistungsmethoden ermöglichen es Ihnen, einen Rückruf auf alle Elemente einer Auflistung anzuwenden. Im Grunde ist die Rückrufmethode eine Ihrer Projektmethoden. Sie brauchen keine Schleife zu schreiben, 4D erledigt das für Sie:

Die Methode map Methode wendet den Rückruf auf jedes Element der Sammlung an und gibt eine Sammlung mit allen neuen Elementen zurück. Wenn Sie z. B. den Prozentsatz für jede Zahl in einer Sammlung anhand der Gesamtsumme berechnen müssen, ist das mit map ganz einfach:

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

wobei Prozentsatz eine Projektmethode wie folgt ist:

$1.Ergebnis:=Rund(($1.Wert/$2)*100;2)

Die Methode reduce Methode wendet einen Rückruf auf einen Akkumulator und jedes Element der Sammlung (von links nach rechts) an, um sie auf ein einzelnes Element zu reduzieren. In einer Sammlung mit mehreren gemischten Produkten möchten Sie zum Beispiel die Gesamtsumme jedes Produkts berechnen. Die Methode reduce Methode macht dies sehr einfach:

$fruits:=NeueSammlung("Banane"; "Kirsche"; "Orange"; "Apfel"; "Kirsche"; "Orange"; "Apfel"; "Banane"; "Kirsche"; "Orange"; "Feige" )
$count:=$fruits.reduce("Tally";Neues Objekt) // use Tally as call back method
//$count={Banane:2,Kirsche:3,Orange:3,Apfel:2,Feige:1}

wobei Tally eine Projektmethode wie folgt ist:

// Suche, ob eine Frucht mit diesem Namen bereits in der Akkumulatorensammlung existiert
If ($1.akkumulator[$1.wert]#Null)
$1.akkumulator[$1.wert]:=$1.akkumulator[$1.wert]+1
Else
// Wenn sie noch nicht existiert, erstelle eine neue Frucht
$1.akkumulator[$1.wert]:=1
End if

Fabrice Mainguené
- Product Owner -Fabrice Mainguené gehört seit November 2016 zum 4D Program Team. Als Product Owner ist er verantwortlich für das Schreiben der User Stories und deren Umsetzung in funktionale Spezifikationen. Seine Aufgabe ist es auch, sicherzustellen, dass die gelieferte Funktionsimplementierung den Kundenanforderungen entspricht.Nach seinem Bachelor-Abschluss in Informatik am CNAM arbeitete Fabrice als Windev-Entwickler bei einem kleinen Software-Verlag. Danach arbeitete er für verschiedene Unternehmen in Industrie und Handel als Windev- und Webentwickler sowie als technischer Berater für neue Funktionen.