Table de hachage en Perl
Niroise
Messages postés
38
Statut
Membre
-
Idéophage Messages postés 54 Statut Membre -
Idéophage Messages postés 54 Statut Membre -
Bonjour,
je souhaite obtenir toutes les valeurs indexées par une clé dans une table de hachage
en faite mon fichier est structuré de cette façon:
key1 valeur1
key1 valeur2
key1 valeur3
key1 valeur4
key2 valeur1
key2 valeur2
key3 valeur3
key4 valeur4
foreach my $v (values(%h)){
if (exists ($h{$key1})){
print $h{key1}[0]."\n";}
}
ça me retourne uniquement valeur1 tandis que moi je veux avoir toutes les valeurs correspondantes à key1 càd
valeur1
valeur2
valeur3
valeur4
voilà, merci de m'aider :)
je souhaite obtenir toutes les valeurs indexées par une clé dans une table de hachage
en faite mon fichier est structuré de cette façon:
key1 valeur1
key1 valeur2
key1 valeur3
key1 valeur4
key2 valeur1
key2 valeur2
key3 valeur3
key4 valeur4
foreach my $v (values(%h)){
if (exists ($h{$key1})){
print $h{key1}[0]."\n";}
}
ça me retourne uniquement valeur1 tandis que moi je veux avoir toutes les valeurs correspondantes à key1 càd
valeur1
valeur2
valeur3
valeur4
voilà, merci de m'aider :)
A voir également:
- Table de hachage en Perl
- Table ascii - Guide
- Table des matières word - Guide
- Tableau croisé dynamique ou table de pilote - Guide
- Table des caractères - Guide
- No bootable partition in table ✓ - Forum Windows
1 réponse
Salut,
Je répond un peu tard, mais comme ça il y aura une réponse :
Les tables de hachages en Perl ne peuvent pas contenir plusieurs valeurs pour une même clef. Il faut pour cela utiliser des références vers un tableau de valeurs correspondants à cette clef. Voici un code d'exemple :
Je répond un peu tard, mais comme ça il y aura une réponse :
Les tables de hachages en Perl ne peuvent pas contenir plusieurs valeurs pour une même clef. Il faut pour cela utiliser des références vers un tableau de valeurs correspondants à cette clef. Voici un code d'exemple :
my %hash = ();
# Lecture de la table de hachage (entrée standard) :
my ($lgLue, $clef, $valeur) = ();
sub lirePaire {
$lgLue = <>;
chomp $lgLue;
($clef, $valeur) = ((split '=>', $lgLue), undef);
# L'OP aurait mis ' ' à la place de '=>'
return 0 unless( defined $valeur );
# ou avec une regex telle que $lgLue =~ m=end|fin=i
if( defined $hash{$clef} )
{ push @{$hash{$clef}}, $valeur; }
else
{ $hash{$clef} = [$valeur]; }
return 1;
}
while( lirePaire ) {}
#affichage :
foreach my $clef (keys %hash)
{ print "$clef : $_\n" foreach(@{ $hash{$clef} }); }