Учебники

Эликсир — Списки ключевых слов

До сих пор мы не обсуждали никаких ассоциативных структур данных, т. Е. Структур данных, которые могут связывать определенное значение (или несколько значений) с ключом. Разные языки называют эти функции разными именами, например словари, хэши, ассоциативные массивы и т. Д.

В Elixir у нас есть две основные ассоциативные структуры данных: списки ключевых слов и карты. В этой главе мы сосредоточимся на списках ключевых слов.

Во многих функциональных языках программирования обычно используется список из двух элементов в качестве представления ассоциативной структуры данных. В Elixir, когда у нас есть список кортежей, а первый элемент кортежа (т.е. ключ) является атомом, мы называем его списком ключевых слов. Рассмотрим следующий пример, чтобы понять то же самое —

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

Elixir поддерживает специальный синтаксис для определения таких списков. Мы можем поместить двоеточие в конец каждого атома и полностью избавиться от кортежей. Например,

Live Demo

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

Вышеуказанная программа сгенерирует следующий результат —

true

Оба из них представляют список ключевых слов. Поскольку списки ключевых слов также являются списками, мы можем использовать все операции, которые мы использовали в списках над ними.

Чтобы получить значение, связанное с атомом в списке ключевых слов, передайте атом как [] после имени списка —

Live Demo

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

Вышеуказанная программа генерирует следующий результат —

1

Списки ключевых слов имеют три специальные характеристики —

  • Ключи должны быть атомами.
  • Ключи заказываются, как указано разработчиком.
  • Ключи можно давать более одного раза.

Чтобы манипулировать списками ключевых слов, Elixir предоставляет модуль Keyword . Помните, однако, что списки ключевых слов — это просто списки, и поэтому они обеспечивают те же линейные характеристики производительности, что и списки. Чем длиннее список, тем больше времени потребуется для поиска ключа, подсчета количества предметов и т. Д. По этой причине списки ключевых слов используются в Elixir в основном в качестве параметров. Если вам нужно хранить много предметов или гарантировать связывание с одним ключом с максимальным значением, используйте карты.

Доступ к ключу

Чтобы получить доступ к значениям, связанным с данным ключом, мы используем функцию Keyword.get . Возвращает первое значение, связанное с данным ключом. Чтобы получить все значения, мы используем функцию Keyword.get_values. Например —

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

Вышеуказанная программа сгенерирует следующий результат —

1
[1, 2]

Вставка ключа

Чтобы добавить новое значение, используйте Keyword.put_new . Если ключ уже существует, его значение остается неизменным —

Live Demo

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

Когда вышеуказанная программа запускается, она создает новый список ключевых слов с дополнительным ключом c и генерирует следующий результат:

5

Удаление ключа

Если вы хотите удалить все записи для ключа, используйте Keyword.delete; чтобы удалить только первую запись для ключа, используйте Keyword.delete_first .

Live Demo

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))

Это удалит первый b в списке и все a в списке. Когда вышеуказанная программа запущена, она выдаст следующий результат: