D dispone nativamente di array associativi, conosciuti anche come hashmap.
Un array associativo con chiavi di tipo string
e valori di tipo int
si dichiara in questo modo:
int[string] arr;
I valori possono essere inseriti e acceduti utilizzando la loro chiave:
arr["key1"] = 10;
Per verificare la presenza di una chiave nell'array associativo, è possibile
utilizzare l'operatore in
:
if ("key1" in arr)
writeln("Yes");
L'operatore in
restituisce un puntatore al valore se questo esiste,
altrimenti restituisce un puntatore null
. Questo permette di combinare
in modo elegante il controllo dell'esistenza con l'assegnazione:
if (auto val = "key1" in arr)
*val = 20;
L'accesso a una chiave che non esiste genera un RangeError
che termina immediatamente l'applicazione. Per un accesso sicuro
con un valore predefinito, si può utilizzare get(key, defaultValue)
.
Gli array associativi hanno la proprietà .length
come gli array normali e forniscono
un membro .remove(key)
per rimuovere le voci tramite la loro chiave.
È lasciato come esercizio al lettore esplorare
i range speciali .byKey
e .byValue
.