Table de hachage en Perl
Niroise
Messages postés
29
Date d'inscription
Statut
Membre
Dernière intervention
-
-
-
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
- Table des caractères - Guide
- Tableau croisé dynamique ou table de pilote - 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} }); }