D Programmierung - Assoziative Arrays

Assoziative Arrays haben einen Index, der nicht unbedingt eine Ganzzahl ist und nur spärlich gefüllt werden kann. Der Index für ein assoziatives Array heißtKeyund sein Typ heißt der KeyType.

Assoziative Arrays werden deklariert, indem der KeyType in das [] einer Array-Deklaration eingefügt wird. Ein einfaches Beispiel für ein assoziatives Array ist unten dargestellt.

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

Wenn der obige Code kompiliert und ausgeführt wird, ergibt sich das folgende Ergebnis:

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

Assoziatives Array initialisieren

Eine einfache Initialisierung des assoziativen Arrays ist unten dargestellt.

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

Wenn der obige Code kompiliert und ausgeführt wird, ergibt sich das folgende Ergebnis:

1

Eigenschaften des assoziativen Arrays

Hier sind die Eigenschaften eines assoziativen Arrays -

Sr.Nr. Objektbeschreibung
1

.sizeof

Gibt die Größe der Referenz auf das assoziative Array zurück. Es ist 4 in 32-Bit-Builds und 8 in 64-Bit-Builds.

2

.length

Gibt die Anzahl der Werte im assoziativen Array zurück. Im Gegensatz zu dynamischen Arrays ist es schreibgeschützt.

3

.dup

Erstellen Sie ein neues assoziatives Array derselben Größe und kopieren Sie den Inhalt des assoziativen Arrays hinein.

4

.keys

Gibt ein dynamisches Array zurück, dessen Elemente die Schlüssel im assoziativen Array sind.

5

.values

Gibt ein dynamisches Array zurück, dessen Elemente die Werte im assoziativen Array sind.

6

.rehash

Reorganisiert das assoziative Array an Ort und Stelle, damit Suchvorgänge effizienter sind. Rehash ist effektiv, wenn das Programm beispielsweise mit dem Laden einer Symboltabelle fertig ist und nun schnelle Suchvorgänge benötigt. Gibt einen Verweis auf das reorganisierte Array zurück.

7

.byKey()

Gibt einen Delegaten zurück, der zur Verwendung als Aggregat für ein ForeachStatement geeignet ist, das über die Schlüssel des assoziativen Arrays iteriert.

8

.byValue()

Gibt einen Delegaten zurück, der zur Verwendung als Aggregat geeignet ist, an ein ForeachStatement, das die Werte des assoziativen Arrays durchläuft.

9

.get(Key key, lazy Value defVal)

Schlägt Schlüssel nach; Wenn es existiert, wird der entsprechende Wert zurückgegeben, andernfalls wird defVal ausgewertet und zurückgegeben.

10

.remove(Key key)

Entfernt ein Objekt für den Schlüssel.

Beispiel

Ein Beispiel für die Verwendung der obigen Eigenschaften ist unten dargestellt.

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

Wenn der obige Code kompiliert und ausgeführt wird, ergibt sich das folgende Ergebnis:

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]