<commit_before>---
layout: page
title: Kolekcie
category: basics
order: 2
lang: sk
---


Listy, tuples, keywords, mapy, dictionaries a kombinátory.

{% include toc.html %}

## Zoznamy

Zoznamy (lists) sú jednoduché kolekcie hodnôt, ktoré môžu obsahovať viacero dátových typov. Môžu tiež obsahovať neunikátne hodnoty (t.j. prvky sa môžu opakovať):

```elixir
iex> [3.14, :pie, "Apple"]
[3.14, :pie, "Apple"]
```

V Elixire sú zoznamy implementované ako linked lists. To znamená, že prístup k prvkom zoznamu je operácia so zložitosťou `O(n)` (lineárna zložitosť). Z tohto dôvodu je zvyčajne rýchlejšie nové prvky pridávať na začiatok zoznamu, než na jeho koniec:

```elixir
iex> list = [3.14, :pie, "Apple"]
[3.14, :pie, "Apple"]
iex> ["π"] ++ list
["π", 3.14, :pie, "Apple"]
iex> list ++ ["Cherry"]
[3.14, :pie, "Apple", "Cherry"]
```


### Spájanie zoznamov

Na spájanie zoznamov (list concatenation) slúži v Elixire operátor `++`:

```elixir
iex> [1, 2] ++ [3, 4, 1]
[1, 2, 3, 4, 1]
```

### Odčítavanie zoznamov

Odčítanie zoznamov (list substraction) sa robí operátorom `--`. Odčítanie hodnoty, ktorá v pôvodnom zozname neexistuje, je v poriadku:

```elixir
iex> ["foo", :bar, 42] -- [42, "bar"]
["foo", :bar]
```

### Head / Tail

Pri práci so zoznamami je veľmi bežné pristupovanie k tzv. Head a Tail zoznamu. Head (hlava) je prvý element zoznamu, Tail (chvost) je jeho zvyšok. Elixir nám na prístup k týmto častiam poskytuje dve užitočné funkcie `hd` a `tl`:

```elixir
iex> hd [3.14, :pie, "Apple"]
3.14
iex> tl [3.14, :pie, "Apple"]
[:pie, "Apple"]
```

Naviac, ako si ukážeme v neskorších lekciách, sa na tento účel dá krásne použiť operátor pipe (`|`):

```elixir
iex> [h|t] = [3.14, :pie, "Apple"]
[3.14, :pie, "Apple"]
iex> h
3.14
iex> t
[:pie, "Apple"]
```

## Tuples

Tuples sú podobné zoznamom, no v pamäti sú ulošené ako súvislá oblasť. Vďaka tomu je prístup k ich prvkom veľmi rýchly, rovnako ako zisťovanie ich dĺžky (size). Na duhú stranu, modifikácia tuplov je náročná a pomalá, pretože nový (zmenený) tuple musí byť v pamäti kompletne prekopírovaný. Tuples definujeme pomocou zložených zátvoriek:

```elixir
iex> {3.14, :pie, "Apple"}
{3.14, :pie, "Apple"}
```<commit_msg>Using proper term in 'collection' - cons operator #608 (#611)<commit_after>---
layout: page
title: Kolekcie
category: basics
order: 2
lang: sk
---


Listy, tuples, keywords, mapy, dictionaries a kombinátory.

{% include toc.html %}

## Zoznamy

Zoznamy (lists) sú jednoduché kolekcie hodnôt, ktoré môžu obsahovať viacero dátových typov. Môžu tiež obsahovať neunikátne hodnoty (t.j. prvky sa môžu opakovať):

```elixir
iex> [3.14, :pie, "Apple"]
[3.14, :pie, "Apple"]
```

V Elixire sú zoznamy implementované ako lineárne zoznamy (*linked lists*). To znamená, že prístup k prvkom zoznamu je operácia so zložitosťou `O(n)` (lineárna zložitosť). Z tohto dôvodu je zvyčajne rýchlejšie nové prvky pridávať na začiatok zoznamu, než na jeho koniec:

```elixir
iex> list = [3.14, :pie, "Apple"]
[3.14, :pie, "Apple"]
iex> ["π"] ++ list
["π", 3.14, :pie, "Apple"]
iex> list ++ ["Cherry"]
[3.14, :pie, "Apple", "Cherry"]
```


### Spájanie zoznamov

Na spájanie zoznamov (list concatenation) slúži v Elixire operátor `++`:

```elixir
iex> [1, 2] ++ [3, 4, 1]
[1, 2, 3, 4, 1]
```

### Odčítavanie zoznamov

Odčítanie zoznamov (list substraction) sa robí operátorom `--`. Odčítanie hodnoty, ktorá v pôvodnom zozname neexistuje, je v poriadku:

```elixir
iex> ["foo", :bar, 42] -- [42, "bar"]
["foo", :bar]
```

### Head / Tail

Pri práci so zoznamami je veľmi bežné pristupovanie k tzv. Head a Tail zoznamu. Head (hlava) je prvý element zoznamu, Tail (chvost) je jeho zvyšok. Elixir nám na prístup k týmto častiam poskytuje dve užitočné funkcie `hd` a `tl`:

```elixir
iex> hd [3.14, :pie, "Apple"]
3.14
iex> tl [3.14, :pie, "Apple"]
[:pie, "Apple"]
```

Naviac, ako si ukážeme v neskorších lekciách, sa na tento účel dá krásne použiť operátor `|` (cons):

```elixir
iex> [h|t] = [3.14, :pie, "Apple"]
[3.14, :pie, "Apple"]
iex> h
3.14
iex> t
[:pie, "Apple"]
```

## Tuples

Tuples sú podobné zoznamom, no v pamäti sú ulošené ako súvislá oblasť. Vďaka tomu je prístup k ich prvkom veľmi rýchly, rovnako ako zisťovanie ich dĺžky (size). Na duhú stranu, modifikácia tuplov je náročná a pomalá, pretože nový (zmenený) tuple musí byť v pamäti kompletne prekopírovaný. Tuples definujeme pomocou zložených zátvoriek:

```elixir
iex> {3.14, :pie, "Apple"}
{3.14, :pie, "Apple"}
```
{'fraction_non_alphanumeric': 0.1506172839506173, 'fraction_numerical': 0.026936026936026935, 'mean_word_length': 4.535403726708075, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 27, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '7465057', 'n_tokens_mistral': 2216, 'n_tokens_neox': 2096, 'n_words': 630}