• Publicidad

Duda con hashes

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

Duda con hashes

Notapor BigBear » 2011-11-01 13:02 @585

Hola. Tengo una duda sobre cómo usar los hashes, porque quiero usar un valor como una especie de array. Lo que quiero hacer es que el valor en saludos sean dos variables una llamada hola y otra llamada chau, pero el problema en el código es que solo hay espacio para uno. El código es el siguiente:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my %encontrados;
  2.  
  3. $encontrados{'saludos'} = "hola";
  4. $encontrados{'saludos'} = "chau";
  5.  
  6. for my $data(keys %encontrados) {
  7. print $data."\n";
  8. print $encontrados{$data}."\n\n";
  9. }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


¿ Alguien puede explicarme cómo hago esto ?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Publicidad

Re: Duda con hashes

Notapor explorer » 2011-11-01 13:44 @614

Si $encontrados{"saludos"} debe ser un array, debes tratarlo como tal:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
push @{ $encontrados{"saludos"} }, 'hola';
push @{ $encontrados{"saludos"} }, 'chau';
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Luego, tienes que acceder a ellos, con una indirección más:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
print $encontrados{"saludos"}[1]; # chau
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Recuerda que cuando gestiones estructuras complejas, Data::Dumper es tu amigo.

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

Re: Duda con hashes

Notapor BigBear » 2011-11-01 13:53 @620

Gracias por la respuesta, explorer, pero tengo otra duda sobre cómo listar todos los valores pues no quiero listar solo "chau". El código es el siguiente:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my %encontrados;
  2.  
  3. push @{ $encontrados{"saludos"} }, 'hola';
  4. push @{ $encontrados{"saludos"} }, 'chau';
  5.  
  6. for my $data(keys %encontrados) {
  7. print $data."\n";
  8. print $encontrados{$data}."\n\n";
  9. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


¿ Cómo puedo listar todos los valores ?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Duda con hashes

Notapor explorer » 2011-11-01 16:19 @721

Pues lo mismo que cualquier otro array....

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
for my $data (keys %encontrados) {
    print $data, "\n";
    for my $valor ( @{ $encontrados{$data} } ) {
        print "\t$valor\n\n";
    }
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Repito: estas cosas las tienes comentadas en perldsc.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Duda con hashes

Notapor BigBear » 2011-11-16 09:36 @441

Tengo otra duda porque tengo este hash que imprimí usando Data::Dumper:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $VAR1 = 'a';
  2. $VAR2 = '49585';
  3. $VAR3 = 'b';
  4. $VAR4 = '50568';
  5. $VAR5 = 'c';
  6. $VAR6 = '49576';
  7.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Mi duda es: ¿cómo hago para mostrar los números usando el número que tiene en la lista? Algo así como poner
1, que muestre los números de la primera.

¿ Alguien me puede ayudar ?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Duda con hashes

Notapor explorer » 2011-11-16 12:27 @560

Los números los pone Data::Dumper. No pertenecen al hash.

Lo que puedes hacer es un bucle for() a través de las keys() del hash, e ir incrementando una variable contador, cuyo valor imprimirás.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Duda con hashes

Notapor BigBear » 2011-11-16 12:32 @563

Pero ¿cómo lo hago en una línea? Me refiero al ejemplo de poner solo el valor del primero porque solo quiero listar uno mediante su número, no quiero listarlos a todos usando for().
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Duda con hashes

Notapor explorer » 2011-11-16 12:40 @569

Si quieres sacar el valor correspondiente a una clave, te vale con ponerlo de forma directa:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
print $hash{'b'}; # Imprime '50568'
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Pero no puedes acceder ni a los valores ni a las claves con esos números. Esos números se los inventa Data::Dumper.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Duda con hashes

Notapor BigBear » 2011-11-16 12:48 @575

Gracias por la ayuda explorer. Tengo otra duda: ¿cómo haría para acceder al valor correspondiente sin conocer el valor 'b'? Lo que me refiero es hacerlo mediante el número de orden.

Intenté con
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. print $hash{0}; # Imprime '50568'
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

pero nada. ¿me podrías responder la duda?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Duda con hashes

Notapor explorer » 2011-11-16 12:59 @582

Por tercera vez te digo que en los hash no hay números, ni números de orden.

Con la línea
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
print $hash{0};
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
le estás pidiendo a Perl que saque el valor correspondiente a la clave '0'.

Si esa clave no existe, pues no saca nada.

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


Volver a Básico

¿Quién está conectado?

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