Listen
Elixir-Dokumentation: https://hexdocs.pm/elixir/List.html
Funktionen
hd
Die Funktion hd
gibt den Head einer Liste zurück.
lst = ["a", "b", "c", 5]
hd(lst)
iex> "a"
tl
Die Funktion tl
gibt den Tail einer Liste zurück.
lst = ["a", "b", "c", 5]
tl(lst)
iex> ["b", "c", 5]
length
Die Länge einer Liste - also die Anzahl der Elemente - lässt sich mit der Funktion length
ermitteln.
lst = ["a", "b", "c", 5]
length(lst)
iex> 4
Abläufe
Element hinzufügen
Ein Element kann man an eine Liste hinzufügen, indem man eine neue Liste erzeugt. Bei dieser ist das hinzuzufügende Element der Head und die ursprüngliche Liste der Tail.
lst = ["a", "b", "c", 5]
["neu" | lst]
iex> ["neu", "a", "b", "c", 5]
Das Hinzufügen an den Head, also den Anfang einer Liste, ist sehr effizient und schnell. Listen sind in Elixir als linked lists umgesetzt: jedes Element zeigt auf das jeweils nächste Element. Beim Hinzufügen an den Anfang einer Liste muss die ursprüngliche Liste gar nicht geändert werden; es wird nur ein neues Element erzeugt, das man auf das ursprünglich erste Element zeigen lässt.
Es besteht auch die Möglichkeit, ein Element an das Ende einer Liste anzufügen. Das ist aber rechnerisch aufwändiger. Es muss die gesamte Liste traversiert (durchgegangen) werden, um zum letzten Element zu gelangen. Dieses muss dann auf das neue Element verweisen. Da aber Datenstrukturen in Elixir (im Regelfall) unveränderlich (immutable) sind, muss eine neue Liste angelegt werden, in die diese Werte geschrieben werden.
Wenn wirklich an das Ende einer Liste angefügt werden soll, bietet sich bei großen Liste folgender Trick an:
- man dreht die Liste um
- man fügt wie gehabt Elemente an den Anfang der Liste an
- man dreht die Liste wieder um
Befindet sich ein Wert in der Liste?
Häufig möchte man prüfen, ob ein gegebener Wert sich in einer Liste befindet. Elixir bietet dazu mit in
eine schnelle Möglichkeit.
lst = ["a", "b", "c", 5]
"b" in lst
iex> true
"4 in lst
iex> false
List.wrap
Mit dieser Funktion kann man einen Wert in eine Liste einbetten. Handelt es sich bereits um eine Liste, wird diese einfach zurückgegeben. Ist der Wert eine skalare Variable, wird eine Liste mit diesem Wert als einziges Element zurückgegeben.
# mit einer Nicht-Liste als Variable wird diese in eine Liste eingebettet
iex> List.wrap("stringvariable")
["stringvariable"]
# mit einer Liste als Variable wird diese einfach wieder zurückgegeben
iex> List.wrap(["stringvariable"])
["stringvariable"]