Temas:
| Llave | Valor |
|---|---|
| 1 | 4 |
| 2 | 15 |
| 3 | 0 |
| 4 | 10 |
| 5 | 22 |
| 6 | 0 |
| 7 | 1 |
| 8 | 0 |
La columna de la izquierda contiene las llaves (keys) y la columna de la derecha el valor asociado a cada llave. El ejemplo de más arriba podría ser la cantidad de votos captados por cada candidato. El número del candidato corresponde a la llave y la cantidad de votos es el valor asociado.
Los arreglos asociativos son objetos que realizan principales dos operaciones: (i) obtener el valor asociado a una llave, y (ii) cambiar el valor asociado a una llave. Con estas operaciones es sencillo resolver el problema del recuento de los votos:
Observaciones:
TextReader lect= new TextReader("votos.txt");
Map tab= new Map(); // Crea un arreglo asociativo
// Crear las filas del arreglo asociativo
// El valor inicial asociado a cada candidato es 0
int cand= 1;
while (cand<=8) {
tab.put(cand, 0); // Asocia 0 al candidato cand
cand= cand+1;
}
// Leer los votos
while(true) {
int candVoto= lect.readInt();
if (lect.eofReached())
break;
// Obtenemos el numero de votos del candidato
int anterior= tab.getInt(candVoto);
int nuevo= anterior+1;
tab.put(candVoto, nuevo); // Cambiar el valor asociado
}
cand= 1;
while (cand<=8) {
println("Candidato "+cand+": "+tab.getInt(cand));
cand= cand+1;
}
lect.close();
tab.put(candVoto, tab.getInt(candVoto)+1);
El valor asociado a una llave puede ser un valor real. Por ejemplo, podemos asociar a cada candidato su estatura:
También podemos asociar a cada candidato su nombre:
Map tabEst= new Map();
tabEst.put(1, 1.70);
tabEst.put(2, 1.85);
...
println("La estatura del candidato 3 es "+
tabEst.getDouble(3));
Map tabNombres= new Map();
tabNombres.put(1, "Ronald Reagan");
tabNombres.put(2, "Margaret Tatcher");
...
println("El candidato 5 es "+tabNombres.getString(5));
Tarea:
El archivo ``est.txt'' contiene los nombres de cada candidato en el siguiente formato:
2:Margaret Tatcher
8:Boris Yeltsin
...
1:Ronald Reagan
Número de candidato ? 8
Su nombre es Boris Yeltsin
Número de candidato ? 1
Su nombre es Ronald Reagan
Número de candidato ? x
Su nombre es ...
...
Número de candidato ? 0
fin