Comment puis-je convertir un tableau à une table de hachage en Perl?
J'ai un tableau et a essayé de convertir le contenu du tableau à une valeur de hachage avec des clés et des valeurs. L'Index 0 est une clé, l'indice 1 est une valeur, indice 2 est une clé, indice 3 est une valeur, etc.
Mais il ne produit pas le résultat attendu. Le code est ci-dessous:
open (FILE, "message.xml") || die "Cannot open\n";
$var = <FILE>;
while ($var ne "")
{
chomp ($var);
@temp = split (/[\s\t]\s*/,$var);
push(@array,@temp);
$var = <FILE>;
}
$i = 0;
$num = @array;
while ($i < $num)
{
if (($array[$i] =~ /^\w+/i) || ($array[$i] =~ /\d+/))
{
# print "Matched\n";
# print "\t$array[$i]\n";
push (@new, $array[$i]);
}
$i ++;
}
print "@new\n";
use Tie::IxHash;
tie %hash, "Tie::IxHash";
%hash = map {split ' ', $_, 2} @new;
while ((my $k, my $v) = each %hash)
{
print "\t $k => $v\n";
}
La sortie produite n'est pas correct:
name Protocol_discriminator attribute Mandatory type nibble value 7 min 0 max F name Security_header attribute Mandatory type nibble value 778 min 0X00 max 9940486857
name => Security_header
attribute => Mandatory
type => nibble
value => 778
min => 0X00
max => 9940486857
Dans la sortie, vous pouvez voir que le hachage est formé seulement avec une partie, et une autre partie de la matrice n'est pas créé dans la table de hachage.
Peut aider quelqu'un?
OriginalL'auteur Senthil kumar | 2010-08-05
Vous devez vous connecter pour publier un commentaire.
Rien de plus que:
et ses électeurs: Merci de prendre de votre temps pour lire la question. OP déjà membres dans son de sa question.
Merci @Hawk, une note très utile pour ceux d'entre nous qui lisent le titre et sauter immédiatement à la les réponses 😉
Comment convertir sans variable supplémentaire? J'ai essayer cette %{ @_ }{ clé }, mais il ne fonctionne pas ((
OriginalL'auteur Mysha
Sur une note connexe, pour convertir tous les éléments de
@array
dans les clés de%hash
. Certaines personnes de se retrouver ici pourraient vraiment ce lieu...Cela permet l'utilisation de la fonction exists:
%hash = map { $_ => 1 } @array;
(qui diffère de votre solution dans le fait que les éléments qui se produisent plusieurs fois sont mis à 1).OriginalL'auteur Aaron