• Publicidad

Arrays Asociativos

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Arrays Asociativos

Notapor tutoki » 2012-05-28 15:43 @697

Hola a todos.

Estoy intentado añadir en un array asociativo (hash) una serie de datos (clave, valor) vía teclado estándar (STDIN) y no soy capaz. Lo he intentado con push() pero solo me funciona con array.

Dadme un pista por favor, !gracias¡

SALUD
tutoki
Perlero nuevo
Perlero nuevo
 
Mensajes: 58
Registrado: 2012-04-15 01:53 @120

Publicidad

Re: Arrays Asociativos

Notapor explorer » 2012-05-28 16:29 @728

$hash{$clave} = $valor;

Más información en tu propio ordenador en perldoc perldata, y en la Web (traducido).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Arrays Asociativos

Notapor tutoki » 2012-05-29 11:43 @530

Hola

Algunas preguntas:

1) Entiendo que las claves son únicas, ¿no?
2) Si es así, cómo hago por ejemplo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
hash = marcas
clave = Renualt
valor = rojo
clave = Seat
valor = amarillo
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


¿cómo añado?
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
clave = Renualt
valor = verde
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


¿Debería utilizar otro tipo de array?
¿array de array?

Como ves, no tengo claro este tipo de estructura.

SALUD
tutoki
Perlero nuevo
Perlero nuevo
 
Mensajes: 58
Registrado: 2012-04-15 01:53 @120

Re: Arrays Asociativos

Notapor explorer » 2012-05-29 12:44 @572

Es obvio que, al ser las claves únicas, solo existirá una clave para Renault.

Si queremos guardar varios valores relacionados con esa clave, lo que tenemos que hacer es guardar, como valor, una referencia a un array que almacene esos valores:

$hash{'Renault'} = [ 'rojo', 'verde' ];

La presencia de los corchetes crea un array anónimo (un array sin nombre de variable). De él obtendremos una referencia (puntero) a él, que será lo que almacenaremos como valor en el hash, asociado a la clave 'Renault'. Y dentro de él ya hemos colocado un par de valores.

Si, luego, queremos meter un valor más, 'azul', lo podemos hacer así:

push @{ $hash{'Renault'} }, 'azul';

o, en Perl moderno:

use v5.14;
push $hash{'Renault'}, 'azul';


Más información en perlref, perllol, perldata y perldsc.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Arrays Asociativos

Notapor tutoki » 2012-05-29 14:57 @664

Tiendo a pensar en un hash como algo con filas y columnas.

No tengo claro cómo hacer referencia al array anónimo que me comentas para sacarlo por pantalla.

foreach() es para una hash, digamos, normal.


Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4.  
  5. # Inicializamos el hash
  6. my %coche ;
  7. $coche{'renault'} = [ 'rojo', 'verde', 'amarillo' ];
  8. $coche{'seat'}    = [ 'roja', 'verda', 'amarilla' ];
  9.  
  10. foreach my $color ( keys %coche )
  11. {
  12.         my $coche = $coche{$color};
  13.         print "Los colores de su $color son : ". $coche{'renault'} ."\n";
  14. }
  15.  
  16. # El resultado de print
  17. #Los colores de su renault son: ARRAY(0x8e707ec)
  18. Los colores de su seat son : ARRAY(0x8e707ec)
  19.  
  20.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


SALUD
tutoki
Perlero nuevo
Perlero nuevo
 
Mensajes: 58
Registrado: 2012-04-15 01:53 @120

Re: Arrays Asociativos

Notapor explorer » 2012-05-29 17:04 @753

Pues no, un hash no son filas y columnas.

Es un diccionario: a cada palabra le corresponde una información. Piensa en los índices de palabras que hay al final de los libros: a cada palabra le corresponde una lista de números, que son las páginas donde aparece esa palabra. Pero pueden ser una, dos, veinte números de página. O ninguna. Aunque parezca bidimensional, más bien es una aplicación inyectiva de la clave hacia su valor.


Mejor escribe el ejemplo así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4.  
  5. # Inicializamos el hash (otra forma distinta a la anterior)
  6. my %coche = (
  7.     'renault' => [ 'rojo', 'verde', 'amarillo' ],
  8.     'seat'    => [ 'roja', 'verda', 'amarilla' ],
  9. );
  10.  
  11. for my $marca ( keys %coche ) {                  # las claves de %coche, son las marcas de coches
  12.     my $colores_ref = $coche{$marca};            # el valor es un escalar: una referencia
  13.  
  14.     # si $colores_ref es una ref. a un array, @$colores_ref es el array
  15.     print "Los colores de su $marca son : @$colores_ref\n";
  16. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Más información en perldoc perllol y perldoc perlref.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Arrays Asociativos

Notapor tutoki » 2012-05-29 17:35 @774

Madre mía, pues no tengo que aprender ni na...

Muchas Gracias.

SALUD...
tutoki
Perlero nuevo
Perlero nuevo
 
Mensajes: 58
Registrado: 2012-04-15 01:53 @120


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 6 invitados