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.