• Publicidad

Cómo unir dos array en un hash

Así que programas sin strict y las expresiones regulares son otro modo de hablar. Aquí encontrarás respuestas de nivel avanzado, no recomendable para los débiles de corazón.

Cómo unir dos array en un hash

Notapor danimera » 2008-10-18 17:24 @767

Me gustaría saber la forma óptima de unir dos array y que me queden en un hash, es decir, los datos del primer array serán las llaves y los del segundo las claves...

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
@array1 =('nombre', 'edad', 'pais');
@array2 =('fernado', '17', 'peru');

%hash {
             'nombre' => 'fernado',
             'edad' => '17',
             'pais' => 'peru'
}
 
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


El problema es que nunca sabré cuáles y cuántos son los campos que traerá cada array, lo único que sé es que el número de índices será lo mismo para los dos.
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Publicidad

Notapor explorer » 2008-10-18 20:38 @901

Usa el método zip() del módulo List::MoreUtils:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use List::MoreUtils qw(zip);

my @array1 = qw(nombre  edad pais);
my @array2 = qw(fernado 17   peru);

my %hash = zip @array1, @array2;
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 danimera » 2008-10-18 20:40 @902

Pero explorer, listo... yo hice algo de una forma horripilante para unir eso, qué cosa tan espantosa que da miedo pensarla...

¿Pero no hay una solución efectiva sin usar aquel módulo...? Claro que con éste me quedo ya ^^
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Notapor explorer » 2008-10-18 21:24 @933

Si vieras el código fuente del método List::MoreUtils::zip(), te darías cuenta de que son dos líneas... de las que interesantes solo es una... así que puedes hacer dos cosas:

* Copiar su método en tu programa (y repetirlo en el resto de programas)
* Usar List::MoreUtils::zip(), convencido de su eficiencia

Y no... no se me ocurre otra forma más eficiente que la que el módulo utiliza.
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 danimera » 2008-10-18 21:27 @935

Jjajaja, no pues... sí se te ocurrió... en vez de usar el módulo pues copiar el método... jejeje, gracias ^^
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Notapor kidd » 2008-10-20 07:51 @369

¿Qué tal usando un hash slice?

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my @array1 =('nombre', 'edad', 'pais');
my @array2 =('fernado', '17', 'peru');

my %hash;

@hash{ @array1 } = @array2;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


La ventaja es que no te obliga a usar un módulo externo. Ya sabes, hay más de una manera de lograr las cosas en Perl.


Saludos
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Notapor danimera » 2008-10-25 00:13 @050

Kid, cómo rayos podría yo imaginarme eso, ¿ha...? en sueños... de lo que estaba seguro es que podría lograrlo de otra forma... en Perl siempre es posible eso. Gracias.
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Notapor DAM » 2008-10-28 14:23 @641

Otra forma sencilla podría ser esta:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my @array1 =('nombre', 'edad', 'pais');
my @array2 =('fernado', '17', 'peru');

my %hash;
foreach my $clave (@array1) { $hash{$clave}=shift @array2 }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
DAM
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2008-06-18 06:52 @328

Notapor danimera » 2008-11-03 09:09 @423

Gracias DAM... es buena esa manera; la usé pero estaba buscando una forma más óptima de hacerlo.
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia


Volver a Avanzado

¿Quién está conectado?

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