Programación D - Matrices asociativas

Las matrices asociativas tienen un índice que no es necesariamente un número entero y pueden estar escasamente pobladas. El índice de una matriz asociativa se llamaKey, y su tipo se llama KeyType.

Las matrices asociativas se declaran colocando KeyType dentro de [] de una declaración de matriz. A continuación se muestra un ejemplo sencillo de matriz asociativa.

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

Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:

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

Inicialización de matriz asociativa

A continuación se muestra una inicialización simple de una matriz asociativa.

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

Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:

1

Propiedades de la matriz asociativa

Aquí están las propiedades de una matriz asociativa:

No Señor. Descripción de propiedad
1

.sizeof

Devuelve el tamaño de la referencia a la matriz asociativa; son 4 en compilaciones de 32 bits y 8 en compilaciones de 64 bits.

2

.length

Devuelve el número de valores de la matriz asociativa. A diferencia de las matrices dinámicas, es de solo lectura.

3

.dup

Cree una nueva matriz asociativa del mismo tamaño y copie el contenido de la matriz asociativa en ella.

4

.keys

Devuelve una matriz dinámica, cuyos elementos son las claves de la matriz asociativa.

5

.values

Devuelve una matriz dinámica, cuyos elementos son los valores de la matriz asociativa.

6

.rehash

Reorganiza la matriz asociativa en su lugar para que las búsquedas sean más eficientes. rehash es efectivo cuando, por ejemplo, el programa ha terminado de cargar una tabla de símbolos y ahora necesita búsquedas rápidas en ella. Devuelve una referencia a la matriz reorganizada.

7

.byKey()

Devuelve un delegado adecuado para su uso como agregado a un ForeachStatement que iterará sobre las claves de la matriz asociativa.

8

.byValue()

Devuelve un delegado adecuado para su uso como agregado de un ForeachStatement que iterará sobre los valores de la matriz asociativa.

9

.get(Key key, lazy Value defVal)

Busca clave; si existe, devuelve el valor correspondiente, de lo contrario, evalúa y devuelve defVal.

10

.remove(Key key)

Elimina un objeto para la clave.

Ejemplo

A continuación se muestra un ejemplo para utilizar las propiedades anteriores.

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

Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:

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]