Li

Listák ebben a kurzusban: Elixir

47 feladat

A(z) Listák fogalomról

A listák az Elixir egyik alapvető adattípusa, amellyel értékek gyűjteményét tárolhatjuk. A listák változtathatatlanok, ami azt jelenti, hogy nem lehet őket módosítani. Minden művelet, ami megváltoztat egy listát, egy új listát ad vissza. A listák megvalósítják az Enumerable protokollt, ami lehetővé teszi az Enum és a Stream modul függvényeinek használatát.

Az Elixirben a listák láncolt listákként valósulnak meg, nem pedig összefüggő memóriaterületek tömbjeként. Ezért egy elem elérése a listában lineáris időt vesz igénybe, a lista hosszától függően.

A listákat felírhatjuk literál formában, fej-farok jelöléssel (amely a cons operátort, a |-t használja), vagy a kettő kombinációjával:

# Literal Form
[]
[1]
[1, 2, 3]

# Head-tail Notation
[]
# same as [1]
[1 | []]
# same as [1, 2, 3]
[1 | [2 | [3 | []]]]

# Mixed
# same as [1, 2, 3]
[1 | [2, 3]]

A cons (|) operátor előtt egynél több elem is állhat.

# Multiple prepends
[1, 2, 3 | [4, 5]]

A fej-farok jelöléssel elemeket fűzhetünk egy listához.

list = [2, 1]

[3, 2, 1] == [3 | list]
# => true

Ha egy listához iteráció közben fűzünk elemeket, azt antimintának tekintjük. Egy elem hozzáfűzése azt igényli, hogy végigmenjünk a teljes listán, és az elemet a végére tegyük. Ezért ha minden iterációban új elemet fűznénk hozzá, minden iterációban végig kellene menni a teljes listán.

Ugyanezt az eredményt elérhetjük úgy, hogy az elemet a megfordított lista elejére fűzzük, majd az eredményt megfordítjuk. A lista elejére fűzés gyors művelet, és állandó időt igényel.

# Appending to the end of a list (potentially slow)
[1, 2, 3] ++ [4] ++ [5] ++ [6]

# Prepend to the start of a list (faster, due to the nature of linked lists)
[6 | [5 | [4 | [3, 2, 1]]]]
# then reverse!

Több gyakori Kernel-függvény is létezik a listákhoz:

  • hd/1 visszaadja egy lista fejét, vagyis a lista első elemét.
  • tl/1 visszaadja a lista farkát, vagyis a listát az első elem nélkül.
  • length/1 visszaadja a listában lévő elemek számát.
  • in/2 Boolean értéket ad vissza, ami megmutatja, hogy az adott elem szerepel-e a listában.

Létezik a List modul is.

A listák bármilyen adattípust tartalmazhatnak, és különböző adattípusok keverékét is.

list = [1, :a, 2.0, "string"]
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg

Tanuld meg a(z) Listák fogalmat

A gyakorlás zárolva

Oldj fel még 6 feladatot, hogy gyakorolhasd a(z) Listák fogalmat