arrays perl copy elements

arrays - La copia de los elementos del conjunto de hashes



perl copy (3)

Mi conjunto de hashes:

@cur = [ { ''A'' => ''9872'', ''B'' => ''1111'' }, { ''A'' => ''9871'', ''B'' => ''1111'' } ];

Resultado Esperado:

@curnew = (''9872'', ''9871'');

Cualquier forma simple de obtener solo los valores del primer elemento hash
esto y asignarlo a una matriz?


En primer lugar, su matriz debe definirse como

my @cur = ( { ''A'' => ''9872'', ''B'' => ''1111'' }, { ''A'' => ''9871'', ''B'' => ''1111'' } );

Tenga en cuenta el paréntesis

#!/usr/bin/perl use strict; use warnings; use Data::Dump qw(dump); my @cur = ( { ''A'' => ''9872'', ''B'' => ''1111'' }, { ''A'' => ''9871'', ''B'' => ''1111'' } ); my @new; foreach(@cur){ push @new, $_->{A}; } dump @new;


Tenga en cuenta que los hashes están desordenados, por lo que primero tomo la palabra para significar lexicográficamente primero .

map { # iterate over the list of hashrefs $_->{ # access the value of the hashref (sort keys $_)[0] # … whose key is the first one when sorted } } @{ # deref the arrayref into a list of hashrefs $cur[0] # first/only arrayref (???) }

La expresión devuelve qw(9872 9871) .

Asignar un arrayref a un array como en @cur = […] es probablemente un error, pero lo tomé al @cur = […] de la @cur = […] .

Solución de bonificación perl5i :

use perl5i::2; $cur[0]->map(sub { $_->{ $_->keys->sort->at(0) } })->flatten;

La expresión devuelve los mismos valores que arriba. Este código es un poco más largo, pero IMO es más legible porque el flujo de ejecución va estrictamente de arriba a abajo, de izquierda a derecha.


use Data::Dumper; my @hashes = map (@{$_}, map ($_, $cur[0])); my @result = map ($_->{''A''} , @hashes); print Dumper /@result;