Table de hachage en Perl

Fermé
Niroise Messages postés 29 Date d'inscription lundi 23 avril 2012 Statut Membre Dernière intervention 3 août 2012 - 3 août 2012 à 15:30
Idéophage Messages postés 43 Date d'inscription mardi 21 août 2012 Statut Membre Dernière intervention 23 novembre 2013 - 26 août 2012 à 17:07
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 :)
A voir également:

1 réponse

Idéophage Messages postés 43 Date d'inscription mardi 21 août 2012 Statut Membre Dernière intervention 23 novembre 2013 5
26 août 2012 à 17:07
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 :

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} }); }

0