Учебники

D Программирование — Ассоциативные массивы

Ассоциативные массивы имеют индекс, который не обязательно является целым числом и может быть малонаселенным. Индекс для ассоциативного массива называется Key , а его тип называется KeyType .

Ассоциативные массивы объявляются путем помещения KeyType в [] объявления массива. Простой пример для ассоциативного массива показан ниже.

Live Demo

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"] 
[]

Инициализация ассоциативного массива

Простая инициализация ассоциативного массива показана ниже.

Live Demo

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 (ключевой ключ)

Удаляет объект для ключа.

пример

Пример использования вышеуказанных свойств показан ниже.

Live Demo

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

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