Ассоциативные массивы


Предыдущая страница
Следующая страница  

Ассоциативные массивы имеют индекс, который не обязательно является целым числом, и он может быть разреженным. Индекс для ассоциативного массива называется ключом (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]

Предыдущая страница
Следующая страница