
Envoyé par
KuK
je l'ai rempli ainsi (via une lecture dans un fichier)
1 2 3
| %collection1 = (
$enseigne => $modele,
); |
Ca c'est pour initialiser un hash, pour le remplir, on procède plutôt comme ça :
$collection1{$enseigne} = $modele;
Par ailleurs dans ton cas, comme dans un hash, chaque clé n'a qu'une seule valeur associée, il serait préférable de faire un hash de tableau, pour rajouter un élément tu ferais :
push @{$collection1{$enseigne}}, $modele;
Ensuite pour comparer les deux collections, il faut visiter le hash et pour chaque enseigne chercher si les tableaux associés ont des éléments en commun :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| sub enseignes_ont_modeles_communs {
my ($col1, $col2) = @_;
my @commun;
for my $enseigne ( keys %{$col1} ) {
push @commun, $enseigne
if( exists $col2->{$enseigne}
and intersect( $col1->{$enseigne}, $col2->{$enseigne} );
}
return @commun;
}
sub intersect {
my ($arr1, $arr2) = @_;
my %temp; @temp{@{$arr1}} = ();
return grep { exists $temp{$_} } @{$arr2};
} |
--
Jedaï
Partager