Elixir - listy słów kluczowych

Jak dotąd nie omawialiśmy żadnych asocjacyjnych struktur danych, tj. Struktur danych, które mogą skojarzyć określoną wartość (lub wiele wartości) z kluczem. Różne języki nazywają te funkcje różnymi nazwami, takimi jak słowniki, skróty, tablice asocjacyjne itp.

W Elixirze mamy dwie główne asocjacyjne struktury danych: listy słów kluczowych i mapy. W tym rozdziale skupimy się na listach słów kluczowych.

W wielu funkcjonalnych językach programowania często używa się listy 2-elementowych krotek jako reprezentacji asocjacyjnej struktury danych. W Elixirze, gdy mamy listę krotek, a pierwszą pozycją krotki (tj. Kluczem) jest atom, nazywamy to listą słów kluczowych. Rozważ następujący przykład, aby zrozumieć to samo -

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

Elixir obsługuje specjalną składnię do definiowania takich list. Możemy umieścić okrężnicę na końcu każdego atomu i całkowicie pozbyć się krotek. Na przykład,

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

Powyższy program wygeneruje następujący wynik -

true

Oba stanowią listę słów kluczowych. Ponieważ listy słów kluczowych są również listami, możemy użyć wszystkich operacji, których użyliśmy na listach na nich.

Aby pobrać wartość skojarzoną z atomem na liście słów kluczowych, przekaż atom jako [] po nazwie listy -

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

Powyższy program generuje następujący wynik -

1

Listy słów kluczowych mają trzy szczególne cechy -

  • Klucze muszą być atomami.
  • Klucze są uporządkowane zgodnie z ustaleniami programisty.
  • Klucze można przekazać więcej niż raz.

W celu manipulowania listami słów kluczowych Elixir udostępnia moduł Keyword . Pamiętaj jednak, że listy słów kluczowych to po prostu listy i jako takie zapewniają takie same liniowe charakterystyki skuteczności jak listy. Im dłuższa lista, tym dłużej zajmie znalezienie klucza, policzenie liczby elementów i tak dalej. Z tego powodu listy słów kluczowych są używane w Elixirze głównie jako opcje. Jeśli chcesz przechowywać wiele elementów lub gwarantować skojarzenia z jednym kluczem z maksymalnie jedną wartością, powinieneś zamiast tego używać map.

Dostęp do klucza

Aby uzyskać dostęp do wartości skojarzonych z danym kluczem, używamy Keyword.getfunkcjonować. Zwraca pierwszą wartość skojarzoną z danym kluczem. Aby uzyskać wszystkie wartości, używamy funkcji Keyword.get_values. Na przykład -

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

Powyższy program wygeneruje następujący wynik -

1
[1, 2]

Wkładanie klucza

Aby dodać nową wartość, użyj Keyword.put_new. Jeśli klucz już istnieje, jego wartość pozostaje niezmieniona -

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

Po uruchomieniu powyższego programu tworzy nową listę słów kluczowych z dodatkowym kluczem c i generuje następujący wynik -

5

Usuwanie klucza

Jeśli chcesz usunąć wszystkie wpisy dla klucza, użyj Keyword.delete; aby usunąć tylko pierwszy wpis dla klucza, użyj 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))

Spowoduje to usunięcie pierwszego b na liście i wszystkie pliki ana liście. Po uruchomieniu powyższego programu wygeneruje następujący wynik -

0