Skip to main content
Eine Liste ist eine geordnete Sammlung von Werten desselben Typs.

Erstellung

Zugriff

Man kann mit list[index] auf ein Element zugreifen.
Wenn der Index nicht existiert, gibt es einen Fehler.

Head und Tail

List.head gibt das erste Element einer Liste zurück.
Achtung: Bei einer leeren Liste gibt List.head einen Fehler.

Sauberer ist oft Pattern Matching:

List.tail gibt die Liste ohne das erste Element zurück.
Auch hier gilt: Bei einer leeren Liste gibt es einen Fehler.

Sauber mit Pattern Matching:

Cons Operator ::

Der Cons Operator :: fügt ein Element vorne an eine Liste an.
Wichtig: Das Element links muss den gleichen Typ haben wie die Elemente der Liste.

Der Cons Operator wird auch oft in Pattern Matching verwendet:

Append Operator @

Der Append Operator @ verbindet zwei Listen.

List Comprehensions

List Comprehensions sind eine kompakte Möglichkeit, Listen zu erzeugen.
Beispiel:

Mit Bedingung

Mehrere yield

Man kann pro Durchlauf mehrere Werte erzeugen.

yield!

yield! fügt eine ganze Liste in die neue Liste ein.

Listenfunktionen

List.map

List.map verändert jedes Element einer Liste nach einer Regel.

List.filter

List.filter behält nur Elemente, die eine Bedingung erfüllen.

List.length

List.length gibt die Anzahl Elemente zurück.

List.sum

List.sum addiert alle Elemente einer numerischen Liste.

List.sumBy

List.sumBy berechnet zuerst pro Element einen Wert und summiert diese Werte danach.

List.min und List.max

Gibt das kleinste bzw. das grösste Element zurück.
Achtung: Bei einer leeren Liste gibt es einen Fehler.

List.minBy und List.maxBy

List.minBy gibt das Element zurück, bei dem ein berechneter Wert am kleinsten ist.
List.maxBy gibt das Element zurück, bei dem ein berechneter Wert am grössten ist.

List.rev

List.rev dreht die Reihenfolge einer Liste um. Die ursprüngliche Liste wird nicht verändert.

List.sort

List.sort sortiert eine Liste aufsteigend.

List.sortBy

List.sortBy sortiert nach einem berechneten Wert.

List.sortDescending

List.sortDescending sortiert eines Liste absteigend.

List.sortDescendingBy

List.zip

List.zip verbindet zwei Listen elementweise zu Tupeln.
Wenn die Listen unterschiedlich lang sind, gibt List.zip einen Fehler.

List.forAll

List.forall prüft, ob alle Elemente eine Bedingung erfüllen.

List.exists

List.exists prüft, ob mindestens ein Element eine Bedingung erfüllt.

List.reduce

List.reduce fasst eine Liste zu einem einzelnen Wert zusammen.
Wichtig: reduce nimmt das erste Element als Startwert. Darum funktioniert reduce nicht mit einer leeren Liste:

List.fold

List.fold ist ähnlich wie reduce, aber man gibt einen Startwert mit.

Unterschied zwischen reduce und fold

List.reduce nimmt das erste Listenelement als Startwert, während List.fold einen eigenen Startwert bekommt.
Deshalb funktioniert fold auch mit leeren Listen im Gegensatz zu reduce, wo ein Fehler geworfen wird.
Nur fold kann z.B. aus einer int list einen string machen.

List.foldBack

List.foldBack läuft von rechts nach links durch die Liste.

Kombination mehrerer Funktionen

In F# kombiniert man Listenfunktionen oft mit der Pipe |>.
xs = [2; 3] { Name = "Anna"; Grade = 5.5 }
{ Name = "Ben"; Grade = 4.0 }
]
{ Name = "Carla"; Grade = 3.5 }
{ Name = "Ben"; Grade = 4.0 }
{ Name = "Anna"; Grade = 5.5 }
]