Elisir: elenchi di parole chiave

Finora, non abbiamo discusso di strutture dati associative, cioè strutture dati che possono associare un certo valore (o più valori) a una chiave. Lingue diverse chiamano queste funzionalità con nomi diversi come dizionari, hash, array associativi, ecc.

In Elixir, abbiamo due principali strutture di dati associative: elenchi di parole chiave e mappe. In questo capitolo, ci concentreremo sugli elenchi di parole chiave.

In molti linguaggi di programmazione funzionale, è comune utilizzare un elenco di tuple di 2 elementi come rappresentazione di una struttura dati associativa. In Elixir, quando abbiamo un elenco di tuple e il primo elemento della tupla (cioè la chiave) è un atomo, lo chiamiamo un elenco di parole chiave. Considera il seguente esempio per capire lo stesso:

list = [{:a, 1}, {:b, 2}]

Elixir supporta una sintassi speciale per la definizione di tali elenchi. Possiamo posizionare i due punti alla fine di ogni atomo e eliminare completamente le tuple. Per esempio,

list_1 = [{:a, 1}, {:b, 2}]
list_2 = [a: 1, b: 2]
IO.puts(list_1 == list_2)

Il programma sopra genererà il seguente risultato:

true

Entrambi rappresentano un elenco di parole chiave. Poiché anche gli elenchi di parole chiave sono elenchi, possiamo utilizzare tutte le operazioni che abbiamo utilizzato sugli elenchi su di essi.

Per recuperare il valore associato a un atomo nell'elenco delle parole chiave, passare l'atomo come a [] dopo il nome dell'elenco -

list = [a: 1, b: 2]
IO.puts(list[:a])

Il programma di cui sopra genera il seguente risultato:

1

Gli elenchi di parole chiave hanno tre caratteristiche speciali:

  • Le chiavi devono essere atomi.
  • Le chiavi vengono ordinate, come specificato dallo sviluppatore.
  • Le chiavi possono essere fornite più di una volta.

Per manipolare gli elenchi di parole chiave, Elixir fornisce il modulo Keyword . Ricorda, tuttavia, che gli elenchi di parole chiave sono semplicemente elenchi e in quanto tali forniscono le stesse caratteristiche di rendimento lineare degli elenchi. Più lungo è l'elenco, più tempo ci vorrà per trovare una chiave, per contare il numero di elementi e così via. Per questo motivo, gli elenchi di parole chiave vengono utilizzati in Elixir principalmente come opzioni. Se è necessario memorizzare molti elementi o garantire agli associati una chiave con un valore massimo di un valore, è necessario utilizzare le mappe.

Accesso a una chiave

Per accedere ai valori associati a una determinata chiave, utilizziamo il Keyword.getfunzione. Restituisce il primo valore associato alla chiave data. Per ottenere tutti i valori, utilizziamo la funzione Keyword.get_values. Ad esempio:

kl = [a: 1, a: 2, b: 3] 
IO.puts(Keyword.get(kl, :a)) 
IO.puts(Keyword.get_values(kl))

Il programma sopra genererà il seguente risultato:

1
[1, 2]

Inserimento di una chiave

Per aggiungere un nuovo valore, usa Keyword.put_new. Se la chiave esiste già, il suo valore rimane invariato -

kl = [a: 1, a: 2, b: 3]
kl_new = Keyword.put_new(kl, :c, 5)
IO.puts(Keyword.get(kl_new, :c))

Quando il programma di cui sopra viene eseguito, produce un nuovo elenco di parole chiave con chiave aggiuntiva, ce genera il seguente risultato:

5

Eliminazione di una chiave

Se vuoi eliminare tutte le voci per una chiave, usa Keyword.delete; per eliminare solo la prima voce di una chiave, utilizzare Keyword.delete_first.

kl = [a: 1, a: 2, b: 3, c: 0]
kl = Keyword.delete_first(kl, :b)
kl = Keyword.delete(kl, :a)

IO.puts(Keyword.get(kl, :a))
IO.puts(Keyword.get(kl, :b))
IO.puts(Keyword.get(kl, :c))

Questo cancellerà il primo b nell'elenco e tutti i file anella lista. Quando il programma di cui sopra viene eseguito, genererà il seguente risultato:

0