map
представляет собой контейнерный тип, содержащий пары «ключ-значение», в которых одно значение привязано к другому. Элементы в ассоциативном массиве упорядочены на основании порядка пар «ключ-значение» при создании массива, и вы получаете доступ к элементам в данном массиве по уникальным ключам, которые определяете сами.
Например, если вы хотите вести подсчёт того, сколько раз встретилось то или иное слово, можно создать ассоциативный массив, используя слово в качестве ключа, а в качестве значения — количество таких слов .
WordCount : [string]int = map{"яблоко" => 11, "груша" => 7}
Нажмите на изображение, чтобы увеличить.
Если при инициализации ассоциативного массива вы используете один и тот же ключ несколько раз, то для него сохраняется только последнее значение. В примере ниже переменная WordCount
будет содержать только пару "яблоко" => 2
. Пары "яблоко" => 0
и "яблоко" => 1
будут перезаписаны.
WordCount : [string]int = map{"яблоко" => 0, "яблоко" => 1, "яблоко" => 2}
Поддерживаемые типы для ключей
Переменные в парах «ключ-значение» могут быть любого типа при условии, что для ключа можно выполнить операцию сравнения, так как должен быть способ проверить, существует ли такой ключ в массиве.
В качестве ключей могут использоваться переменные следующих типов:
- logic;
- int;
- float;
- char;
- string;
- enum;
- Класс, если для него можно выполнить сравнение;
- option, если для типа элемента можно выполнить сравнение;
- Массив, если для типа элемента можно выполнить сравнение;
- Ассоциативный массив, если как для ключа, так и для значения можно выполнить сравнение;
- Кортеж, если для всех его элементов можно выполнить сравнение.
Размер ассоциативного массива
Количество пар «ключ-значение» в массиве можно получить, обратившись к полю Length
данного массива. К примеру, map{"a" => "яблоко", "b" => "медведь", "c" => "конфета"}.Length
будет возвращать значение 3.
Доступ к элементам ассоциативного массива
Доступ к элементам ассоциативного массива выполняется по ключам, например: WordCount["яблоко"]
.
Выражение для доступа к элементу ассоциативного массива является выражением с неоднозначным результатом и может использоваться только в контексте, допускающем неоднозначность, к примеру в выражении if
. Пример:
ExampleMap : [string]string = map{"a" => "яблоко", "b" => "медведь", "c" => "конфета"}
for (Key->Value : ExampleMap):
Print("{Value} в ExampleMap с ключом {Key}")
Ключ | "a" | "b" | "c" |
Значение | "яблоко" | "медведь" | "конфета" |
Добавление и изменение элементов в ассоциативном массиве
Вы можете добавлять элементы в ассоциативный массив, задавая желаемое значение для ключа в массиве. Пример: set ExampleMap["d"] = 4
. Имеющиеся пары «ключ-значение» в ассоциативном массиве можно обновлять, задавая новое значение для ключа.
Добавление элемента в ассоциативный массив относится к категории выражений с неоднозначным результатом и может выполняться только в контексте, допускающем неоднозначность, к примеру в выражении if
. Пример:
var ExampleMap : [string]int = map{"a" => 1, "b" => 2, "c" => 3}
# Изменение имеющегося элемента
if (set ExampleMap["b"] = 3, ValueOfB := ExampleMap["b"]):
Print("Для ключа b в ExampleMap задано новое значение {ValueOfB}")
# Добавление нового элемента
if (set ExampleMap["d"] = 4, ValueOfD := ExampleMap["d"]):
Print("В ExampleMap добавлена новая пара «ключ-значение» со значением {ValueOfD}")
Удаление элементов из ассоциативного массива
При удалении элементов из ассоциативного массива создаётся новый ассоциативный массив, который не содержит удалённые элементы. Ниже приведён пример функции, удаляющей элементы из ассоциативного массива [string]int
.
# Удаляет элемент из заданного ассоциативного массива и возвращает новый ассоциативный массив уже без этого элемента
RemoveKeyFromMap(ExampleMap:[string]int, ElementToRemove:string):[string]int=
var NewMap:[string]int = map{}
# Выполняет конкатенацию ключей из ExampleMap в NewMap, исключая элемент ElementToRemove
for (Key -> Value : ExampleMap, Key <> ElementToRemove):
set NewMap = ConcatenateMaps(NewMap, map{Key => Value})
return NewMap