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