Table de hachage en Perl

Niroise Messages postés 38 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 :)

1 réponse

  1. Idéophage Messages postés 54 Statut Membre 5
     
    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