Programmation en D - Tableaux associatifs

Les tableaux associatifs ont un index qui n'est pas nécessairement un entier et peuvent être peu peuplés. L'index d'un tableau associatif est appelé leKey, et son type s'appelle le KeyType.

Les tableaux associatifs sont déclarés en plaçant le KeyType dans le [] d'une déclaration de tableau. Un exemple simple de tableau associatif est présenté ci-dessous.

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

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -

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

Initialisation d'un tableau associatif

Une simple initialisation du tableau associatif est illustrée ci-dessous.

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

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -

1

Propriétés du tableau associatif

Voici les propriétés d'un tableau associatif -

Sr.No. Propriété et description
1

.sizeof

Renvoie la taille de la référence au tableau associatif; il s'agit de 4 versions 32 bits et de 8 versions 64 bits.

2

.length

Renvoie le nombre de valeurs dans le tableau associatif. Contrairement aux tableaux dynamiques, il est en lecture seule.

3

.dup

Créez un nouveau tableau associatif de même taille et copiez-y le contenu du tableau associatif.

4

.keys

Renvoie un tableau dynamique, dont les éléments sont les clés du tableau associatif.

5

.values

Renvoie un tableau dynamique, dont les éléments sont les valeurs du tableau associatif.

6

.rehash

Réorganise le tableau associatif en place afin que les recherches soient plus efficaces. rehash est efficace lorsque, par exemple, le programme a fini de charger une table de symboles et a maintenant besoin de recherches rapides dans celle-ci. Renvoie une référence au tableau réorganisé.

sept

.byKey()

Renvoie un délégué pouvant être utilisé en tant qu'agrégat dans un ForeachStatement qui itérera sur les clés du tableau associatif.

8

.byValue()

Renvoie un délégué pouvant être utilisé en tant qu'agrégat dans un ForeachStatement qui itérera sur les valeurs du tableau associatif.

9

.get(Key key, lazy Value defVal)

Recherche la clé; s'il existe, renvoie la valeur correspondante, sinon évalue et renvoie defVal.

dix

.remove(Key key)

Supprime un objet pour la clé.

Exemple

Un exemple d'utilisation des propriétés ci-dessus est présenté ci-dessous.

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

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -

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]