Programmazione D - Array associativi

Gli array associativi hanno un indice che non è necessariamente un numero intero e possono essere scarsamente popolati. L'indice per un array associativo è chiamatoKeye il suo tipo è chiamato KeyType.

Gli array associativi vengono dichiarati inserendo KeyType all'interno di [] di una dichiarazione di array. Di seguito è mostrato un semplice esempio di array associativo.

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

Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:

3 
Tuts 
["test":"Tuts"] 
[]

Inizializzazione dell'array associativo

Di seguito viene mostrata una semplice inizializzazione dell'array associativo.

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

Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:

1

Proprietà della matrice associativa

Ecco le proprietà di un array associativo:

Sr.No. Proprietà e descrizione
1

.sizeof

Restituisce la dimensione del riferimento all'array associativo; è 4 nelle build a 32 bit e 8 nelle build a 64 bit.

2

.length

Restituisce il numero di valori nella matrice associativa. A differenza degli array dinamici, è di sola lettura.

3

.dup

Crea un nuovo array associativo della stessa dimensione e copia il contenuto dell'array associativo al suo interno.

4

.keys

Restituisce un array dinamico, i cui elementi sono le chiavi dell'array associativo.

5

.values

Restituisce un array dinamico, i cui elementi sono i valori nell'array associativo.

6

.rehash

Riorganizza la matrice associativa in posizione in modo che le ricerche siano più efficienti. rehash è efficace quando, ad esempio, il programma ha finito di caricare una tabella dei simboli e ora necessita di ricerche veloci in essa. Restituisce un riferimento all'array riorganizzato.

7

.byKey()

Restituisce un delegato adatto per l'uso come aggregato a un ForeachStatement che itera sulle chiavi della matrice associativa.

8

.byValue()

Restituisce un delegato adatto per l'uso come aggregato a un ForeachStatement che itererà sui valori della matrice associativa.

9

.get(Key key, lazy Value defVal)

Cerca la chiave; se esiste restituisce il valore corrispondente altrimenti valuta e restituisce defVal.

10

.remove(Key key)

Rimuove un oggetto per la chiave.

Esempio

Di seguito è mostrato un esempio per l'utilizzo delle proprietà di cui sopra.

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

Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:

sizeof: 8                                                                          
length: 2                                                                          
dup: ["test":3, "test2":20]                                                        
rehashed: ["test":3, "test2":20]                                                   
keys: ["test", "test2"]                                                            
values: [3, 20]                                                                    
by key: test                                                                       
by key: test2                                                                      
by value 3                                                                         
by value 20                                                                        
get value for key test: 3                                                          
get value for key test3: 10                                                        
["test2":20]