Gruppierung
Syntax
$list.groupBy($key-fun)
$list.groupBy($key-fun, $map-fun)
Beschreibung
Gruppiert eine Liste nach Schlüsselwerten, die durch eine Schlüsselfunktion berechnet werden. Falls eine Abbildungsfunktion angegeben wird, wird diese anschließend auf jede Gruppe ausgeführt.
Die Werte der Liste werden entsprechend der Schlüsselfunktion gefiltert und in einem Wörterbuch gespeichert. Wenn man sich nur für einen bestimmten Schüsselwert interessiert, ist eine einfache Filterung ausreichend. Eine Gruppierung nutzt man nur dann, wenn wenn das Gruppierungsergebnis mehrfach verwendet wird, d.h. auf viele Schlüssel zugegriffen wird.
Parameter
Name | Typ | Beschreibung | Pflicht | Default |
---|---|---|---|---|
list | Menge | Eine Liste, die gruppiert werden soll. | ja | |
key-fun | Funktion | Schlüsselfunktion, die für einen Wert aus list einen Schlüsselwert bestimmt. Der Schlüsselwert bestimmt die Gruppe, in die der Wert aus der list einsortiert wird. |
ja | |
map-fun | Funktion | Abbildungsfunktion, welche auf jede erstellte Wertegruppe angewendet wird. | nein | keine Abbildungsfunktion wird ausgeführt |
Rückgabewert
Typ: Fachobjekt
Ein Wörterbuch, das pro berechneten Schlüsselwert eine Liste der dazugehörigen Elemente von list
enthält.
Beispiele
Gruppierung von Namen nach Anfangsbuchstaben
list("Joe", "Tom", "Jane", "Tylor", "Erik")
.groupBy(name -> $name.subString(0, 1))
Ausgabe: Ein Wörterbuch mit folgenden Werten:
{
"J": ["Joe", "Jane"],
"T": ["Tom", "Tylor"],
"E": ["Erik"]
}
Eine Liste von Namen soll nach dem Anfangsbuchstaben gruppiert werden. Die Eingangsliste enthält die Zeichenketten "Joe"
, "Tom"
, "Jane"
, "Tylor"
, und "Erik"
. Die Gruppierungsfunktion name -> $name.subString(0, 1)
ordnet jedem Namen seinen Anfangsbuchstaben zu. Das Ergebnis ist ein Wörterbuch, in dem unter einem Anfangsbuchstaben alle Namen der Eingangsliste verzeichnet sind, die mit diesem Buchstaben anfangen.
Zugriff auf Gruppierungen
{
myGroup =
list("Joe", "Tom", "Jane", "Tylor", "Erik")
.groupBy(name -> $name.subString(0, 1));
$myGroup["J"];
}
Ausgabe: Eine Liste mit den Werten ["Joe", "Jane"]
Da eine Gruppierung ein Wörterbuch als Ergebnis hat, erfolgt der Zugriff entsprechend. Der obige Ausdruck wertet sich zu der Liste derjenigen Namen aus, die mit dem Buchstaben "J" anfangen ("Joe"
, "Jane"
):
Alternativ kann hier auch eine einfache Filterung durchgeführt werden:
list("Joe", "Tom", "Jane", "Tylor", "Erik")
.filter(name -> $name.subString(0, 1) == "J")
Gruppierung mit Abbildungsfunktion
list(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
.groupBy(number -> $number % 2, number -> $number / 2)
Ausgabe: Ein Wörterbuch mit folgenden Werten:
{
1.0: [0.5, 1.5, 2.5, 3.5, 4.5],
0.0: [1.0, 2.0, 3.0, 4.0, 5.0]
}
Die Funktion gruppiert zunächst alle Zahlen der Liste nach geraden und ungeraden Zahlen. Anschließend werden diese durch 2 geteilt.