Ассоциативные массивы имеют индекс, который не обязательно является целым числом, и он может быть разреженным. Индекс для ассоциативного массива называется ключом (Key), а его тип называется KeyType.
Ассоциативные массивы объявляются путем размещения типа ключа KeyType внутри скобок [] объявления массива. Ниже приведен простой пример для ассоциативного массива.
import std.stdio; void main () { int[string] e; // ассоциативный массив b из целых чисел с ключом строкового типа e["test"] = 3; writeln(e["test"]); string[string] f; // ассоциативный массив f из строк с ключом строкового типа f["test"] = "Tuts"; writeln(f["test"]); writeln(f); f.remove("test"); writeln(f); }
Когда вы скомпилируете и выполните эту программу, она возвратит следующий результат:
3 Tuts ["test":"Tuts"] []
Ниже показана простая инициализация ассоциативного массива.
import std.stdio; void main () { int[string] days = [ "Понедельник" : 0, "Вторник" : 1, "Среда" : 2, "Четверг" : 3, "Пятница" : 4, "Суббота" : 5, "Воскресение" : 6 ]; writeln(days["Вторник"]); }
Когда вы скомпилируете и выполните эту программу, она возвратит следующий результат:
1
Вот свойства ассоциативного массива:
№ | Свойство и Описание |
---|---|
1 | .sizeof Возвращает размер ссылки на ассоциативный массив; Это 4 в 32-битных сборках и 8 в 64-битных сборках. |
2 | .length Возвращает количество значений в ассоциативном массиве. В отличие от динамических массивов, это свойство доступно только для чтения. |
3 | .dup Создаёт новый ассоциативный массив того же размера и копирует в него содержимое ассоциативного массива. |
4 | .keys Возвращает динамический массив, элементами которого являются ключи ассоциативного массива. |
5 | .values Возвращает динамический массив, элементами которого являются значения ассоциативного массива. |
6 | .rehash Реорганизует ассоциативный массив на месте, чтобы поиск в нём был более эффективным. rehash эффективен, когда, например, при выполнении программы загружается таблица символов, и теперь в ней требуется быстрый поиск. Возвращает ссылку на реорганизованный массив. |
7 | .byKey() Возвращает делегат, подходящий для использования в качестве агрегата для оператора foreach, который будет перебирать ключи из ассоциативного массива. |
8 | .byValue() Возвращает делегат, подходящий для использования в качестве агрегата для оператора foreach, который будет перебирать значения из ассоциативного массива. |
9 | .get(Key key, lazy Value defVal) Ищет ключ; Если он существует, возвращает соответствующее значение, в противном случае вычисляет и возвращает defVal. |
10 | .remove(Key key) Удаляет объект по ключу. |
Ниже приведён пример использования указанных свойств.
import std.stdio; void main () { int[string] array1; array1["тест"] = 3; array1["тест2"] = 20; writeln("Размер в байтах: ", array1.sizeof); writeln("длина: ", array1.length); writeln("дубликат: ", array1.dup); array1.rehash; writeln("rehashed: ", array1); writeln("ключи: ", array1.keys); writeln("значения: ", array1.values); foreach (key; array1.byKey) { writeln("по ключу: ", key); } foreach (value; array1.byValue) { writeln("по значению ", value); } writeln("получить значение для ключа тест: ", array1.get("тест", 10)); writeln("получить значение для ключа тест3: ", array1.get("тест3", 10)); array1.remove("тест"); writeln(array1); }
Когда вы скомпилируете и выполните эту программу, она возвратит следующий результат:
Размер в байтах: 8 длина: 2 дубликат: ["тест":3, "тест2":20] rehashed: ["тест2":20, "тест":3] ключи: ["тест2", "тест"] значения: [20, 3] по ключу: тест2 по ключу: тест по значению 20 по значению 3 получить значение для ключа тест: 3 получить значение для ключа тест3: 10 ["тест2":20]