Ассоциативные массивы имеют индекс, который не обязательно является целым числом и может быть малонаселенным. Индекс для ассоциативного массива называется Key , а его тип называется KeyType .
Ассоциативные массивы объявляются путем помещения KeyType в [] объявления массива. Простой пример для ассоциативного массива показан ниже.
import std.stdio; void main () { int[string] e; // associative array b of ints that are e["test"] = 3; writeln(e["test"]); string[string] 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 = [ "Monday" : 0, "Tuesday" : 1, "Wednesday" : 2, "Thursday" : 3, "Friday" : 4, "Saturday" : 5, "Sunday" : 6 ]; writeln(days["Tuesday"]); }
Когда приведенный выше код компилируется и выполняется, он дает следующий результат —
1
Свойства ассоциативного массива
Вот свойства ассоциативного массива —
Sr.No. | Описание недвижимости |
---|---|
1 |
.размер Возвращает размер ссылки на ассоциативный массив; это 4 в 32-битных сборках и 8 в 64-битных сборках. |
2 |
.length Возвращает количество значений в ассоциативном массиве. В отличие от динамических массивов, он доступен только для чтения. |
3 |
.dup Создайте новый ассоциативный массив того же размера и скопируйте в него содержимое ассоциативного массива. |
4 |
.keys Возвращает динамический массив, элементами которого являются ключи в ассоциативном массиве. |
5 |
.ценности Возвращает динамический массив, элементами которого являются значения в ассоциативном массиве. |
6 |
.rehash Реорганизует ассоциативный массив на месте, чтобы поиск был более эффективным. Перефразирование эффективно, когда, например, программа закончила загрузку таблицы символов и теперь нуждается в быстром поиске в ней. Возвращает ссылку на реорганизованный массив. |
7 |
.byKey () Возвращает делегат, пригодный для использования в качестве Aggregate для ForeachStatement, который будет перебирать ключи ассоциативного массива. |
8 |
.byValue () Возвращает делегат, пригодный для использования в качестве Aggregate для ForeachStatement, который будет перебирать значения ассоциативного массива. |
9 |
.get (Key key, lazy Value defVal) Смотрит вверх ключ; если он существует, возвращает соответствующее значение, иначе оценивает и возвращает defVal. |
10 |
.remove (ключевой ключ) Удаляет объект для ключа. |
.размер
Возвращает размер ссылки на ассоциативный массив; это 4 в 32-битных сборках и 8 в 64-битных сборках.
.length
Возвращает количество значений в ассоциативном массиве. В отличие от динамических массивов, он доступен только для чтения.
.dup
Создайте новый ассоциативный массив того же размера и скопируйте в него содержимое ассоциативного массива.
.keys
Возвращает динамический массив, элементами которого являются ключи в ассоциативном массиве.
.ценности
Возвращает динамический массив, элементами которого являются значения в ассоциативном массиве.
.rehash
Реорганизует ассоциативный массив на месте, чтобы поиск был более эффективным. Перефразирование эффективно, когда, например, программа закончила загрузку таблицы символов и теперь нуждается в быстром поиске в ней. Возвращает ссылку на реорганизованный массив.
.byKey ()
Возвращает делегат, пригодный для использования в качестве Aggregate для ForeachStatement, который будет перебирать ключи ассоциативного массива.
.byValue ()
Возвращает делегат, пригодный для использования в качестве Aggregate для ForeachStatement, который будет перебирать значения ассоциативного массива.
.get (Key key, lazy Value defVal)
Смотрит вверх ключ; если он существует, возвращает соответствующее значение, иначе оценивает и возвращает defVal.
.remove (ключевой ключ)
Удаляет объект для ключа.
пример
Пример использования вышеуказанных свойств показан ниже.
import std.stdio; void main () { int[string] array1; array1["test"] = 3; array1["test2"] = 20; writeln("sizeof: ",array1.sizeof); writeln("length: ",array1.length); writeln("dup: ",array1.dup); array1.rehash; writeln("rehashed: ",array1); writeln("keys: ",array1.keys); writeln("values: ",array1.values); foreach (key; array1.byKey) { writeln("by key: ",key); } foreach (value; array1.byValue) { writeln("by value ",value); } writeln("get value for key test: ",array1.get("test",10)); writeln("get value for key test3: ",array1.get("test3",10)); array1.remove("test"); writeln(array1); }
Когда приведенный выше код компилируется и выполняется, он дает следующий результат —