• Publicidad

Meter una serie de elementos en una key de hash

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

Meter una serie de elementos en una key de hash

Notapor trujin » 2009-01-10 13:35 @608

Hola,
tengo un array con 2 palabras por ejemplo, y quiero meterlas en una key de una tabla hash. ¿Se puede? Es que solo consigo meter una...

Gracias
trujin
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2009-01-04 12:53 @578

Publicidad

Notapor explorer » 2009-01-10 19:10 @840

Sí que se puede, claro. Solo hay que unirlas de alguna manera:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;

use Data::Dumper::Names;

my @palabras = qw( Hola mundo );

my %hash;

$hash{ "$palabras[0]|$palabras[1]" } = 1;

print Dumper \%hash;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Sale:
Código: Seleccionar todo
%hash = (
          'Hola|mundo' => 1
        );
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

Notapor trujin » 2009-01-11 05:59 @291

Me refería al revés, o sea que: %hash = ( palabra => 'hola', 'mundo' ).
trujin
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2009-01-04 12:53 @578

Notapor creating021 » 2009-01-11 09:42 @446

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use strict;
use warnings;
use diagnostics;

my %hash = (
    "palabra1" => [ "dato1", "dato2" ],
    "palabra2" => [ "dato3", "dato4" ]
);

# imprimir dato1, dato2
print ( join ", ", @{ $hash{ palabra1 } } ) . "\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Un hash de arrays... eso está en los tutoriales: Usando el hash, por Uriel Lizama.
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Notapor explorer » 2009-01-11 18:57 @831

A nivel de programa:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$hash{palabra} = [qw( Hola Mundo )];
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
y también:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
push @{$hash{palabra}}, 'Hola';
push @{$hash{palabra}}, 'Mundo';
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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

Notapor trujin » 2009-01-12 05:03 @252

¿Y cómo podría hacer algo así? @table{$word} = @vec;... así solo me guarda el primer elemento de vec...
trujin
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2009-01-04 12:53 @578

Notapor explorer » 2009-01-12 05:52 @286

Con @table{$word} estás indicando que vas a guardar en %table tantos elementos como claves indiques a continuación. Como solo indicas una ($word), pues solo guarda un elemento de @vec.

Si lo que quieres es guardar todos los elementos de @vec en %table, asociadas a la clave $word, tienes que ponerlo así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$table{$word} = [ @vec ];
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Es decir:
* queremos definir un solo valor correspondiente a la clave $word, por lo que ponemos un '$' delante de table
* ese "valor" que almacenamos es un arreglo. Y la forma de guardar un arreglo dentro de un escalar es por medio de una referencia a un arreglo, por lo que ponemos los '[]', para indicar que estamos creando un arreglo anónimo (un arreglo no asociado a ningún nombre de variable)
* el contenido del arreglo serán los elementos de @vec.

Más información sobre estructuras complejas en perldsc (Perl Data Structures Cookbook) y perllol (Manipulating Arrays of Arrays in Perl).
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

Notapor trujin » 2009-01-12 17:47 @782

Gracias tío, me lo has aclarado muy bien.
trujin
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2009-01-04 12:53 @578


Volver a Básico

¿Quién está conectado?

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

cron