Trie d'un hash par rapport a un autre
Je cherche comment trier efficacement un hash par rapport a un autre le but est de supprimer les valeurs déjà présente du hash de référence du hash en cours
J'ai ce ti script qui marche très bien mais je trouve qu'il fait beaucoup de boucles :cry: ce qui peut poser problème avec des hash de plusieur milliers voir million de valeurs :oops: .
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| #!/usr/bin/perl -w
my %i = ( maison => ["aa"] ); # -> sql
my %l = (maison => ["bb"], rien => ["gna","nananan"] ); # -> page
my @tab = (keys %i);
my @ref = (keys %l);
for ($a = 0; $a <= $#tab; $a++) {
for ($b = 0; $b <= $#ref; $b++) {
if ( $tab[$a] =~ /$ref[$b]/gi ) {
delete $ref[$b];
}
}
}
foreach my $key (@ref) {
print "$l{$key}[0] et $l{$key}[1]\n";
} |
Je cherche des optimisations si vous avez des idées je suis preneur :)
Re: Tris d'un hash par rapport a un autre
Citation:
Envoyé par vodevil
Je cherche des optimisations si vous avez des idées je suis preneur :)
Comme ça, peut être ...
Code:
1 2 3 4 5 6 7 8 9 10
| #!/usr/bin/perl -w
my %i = ( maison => ["aa"] ); # -> sql
my %l = (maison => ["bb"], rien => ["gna","nananan"] ); # -> page
@ref = grep { not exists ($i{$_}) } keys (%l);
foreach my $key (@ref) {
print "$l{$key}[0] et $l{$key}[1]\n";
} |