|
|
|
|
Bonjour,
Je ne comprend pas pourquoi le code ci-après me renvois des doubles dans le tableau malgrés la commande exists ...
#!/usr/bin/env perl
my $raison="";
my %tableau;
for(my $cpt=0; $cpt <= 5; $cpt++){
$token = "token ".$cpt;
if ($cpt == 2) { $token = "token 1"; }
print "compteur : $cpt\n";
print "mot : $token\n";
print "hash avant : \n\t@tableau";
push @tableau, $token unless exists $tableau{$token};
print "\n";
print "hash apres : \n\t@tableau";
print "\n\n";
}
compteur : 0 mot : token 0 hash avant : hash apres : token 0 compteur : 1 mot : token 1 hash avant : token 0 hash apres : token 0 token 1 compteur : 2 mot : token 1 hash avant : token 0 token 1 hash apres : token 0 token 1 token 1 compteur : 3 mot : token 3 hash avant : token 0 token 1 token 1 hash apres : token 0 token 1 token 1 token 3 compteur : 4 mot : token 4 hash avant : token 0 token 1 token 1 token 3 hash apres : token 0 token 1 token 1 token 3 token 4 compteur : 5 mot : token 5 hash avant : token 0 token 1 token 1 token 3 token 4 hash apres : token 0 token 1 token 1 token 3 token 4 token 5
Salut,
lami20j@debian:~/trash$ cat sbouli.pl
#!/usr/bin/perl
use strict;use warnings;
my $raison="";
my %tableau;
my @tableau;
for(my $cpt=0; $cpt <= 5; $cpt++){
my $token = "token ".$cpt;
#if ($cpt == 2) { $token = "token 1"; }
print "compteur : $cpt\n";
print "mot : $token\n";
print "hash avant : \n\t@tableau";
push @tableau,$token unless exists $tableau{$token};
print "\n";
print "hash apres : \n\t@tableau";
print "\n\n";
}
__END__
lami20j@debian:~/trash$ perl sbouli.pl
compteur : 0
mot : token 0
hash avant :
hash apres :
token 0
compteur : 1
mot : token 1
hash avant :
token 0
hash apres :
token 0 token 1
compteur : 2
mot : token 2
hash avant :
token 0 token 1
hash apres :
token 0 token 1 token 2
compteur : 3
mot : token 3
hash avant :
token 0 token 1 token 2
hash apres :
token 0 token 1 token 2 token 3
compteur : 4
mot : token 4
hash avant :
token 0 token 1 token 2 token 3
hash apres :
token 0 token 1 token 2 token 3 token 4
compteur : 5
mot : token 5
hash avant :
token 0 token 1 token 2 token 3 token 4
hash apres :
token 0 token 1 token 2 token 3 token 4 token 5
P.S. Tu n'a rien à me dire?! 106485010510997108
|
Re,
lami20j@debian:~/trash$ cat sbouli.pl
#!/usr/bin/perl
use strict;use warnings;
my $raison="";
my %tableau;
my @tableau;
for(my $cpt=0; $cpt <= 5; $cpt++){
my $token = "token ".$cpt;
if ($cpt == 2) { $token = "token 1"; }
print "compteur : $cpt\n";
print "mot : $token\n";
print "hash avant : \n\t@tableau";
unless (exists $tableau{$token}) {
push @tableau,$token if $cpt!=2;
}
print "\n";
print "hash apres : \n\t@tableau";
print "\n\n";
}
__END__
lami20j@debian:~/trash$ perl sbouli.pl
compteur : 0
mot : token 0
hash avant :
hash apres :
token 0
compteur : 1
mot : token 1
hash avant :
token 0
hash apres :
token 0 token 1
compteur : 2
mot : token 1
hash avant :
token 0 token 1
hash apres :
token 0 token 1
compteur : 3
mot : token 3
hash avant :
token 0 token 1
hash apres :
token 0 token 1 token 3
compteur : 4
mot : token 4
hash avant :
token 0 token 1 token 3
hash apres :
token 0 token 1 token 3 token 4
compteur : 5
mot : token 5
hash avant :
token 0 token 1 token 3 token 4
hash apres :
token 0 token 1 token 3 token 4 token 5
mais c'est inutile puisque le même résultat tu l'obtiens avec#!/usr/bin/perl
use strict;use warnings;
my @tableau;
for(my $cpt=0; $cpt <= 5; $cpt++){
my $token = "token ".$cpt;
if ($cpt == 2) { $token = "token 1"; }
print "compteur : $cpt\n";
print "mot : $token\n";
print "hash avant : \n\t@tableau";
push @tableau,$token if $cpt!=2;
print "\n";
print "hash apres : \n\t@tableau";
print "\n\n";
}
__END__
106485010510997108
|
Re,
lami20j@debian:~/trash$ cat sbouli.pl
#!/usr/bin/env perl
my $raison="";
my %tableau;
for(my $cpt=0; $cpt <= 5; $cpt++){
$token = "token ".$cpt;
if ($cpt == 2) { $token = "token 1"; }
print "compteur : $cpt\n";
print "mot : $token\n";
print "hash avant : \n\t@tableau";
push @tableau, $token unless grep { /$token/ } @tableau;
print "\n";
print "hash apres : \n\t@tableau";
print "\n\n";
}
lami20j@debian:~/trash$ perl sbouli.pl
compteur : 0
mot : token 0
hash avant :
hash apres :
token 0
compteur : 1
mot : token 1
hash avant :
token 0
hash apres :
token 0 token 1
compteur : 2
mot : token 1
hash avant :
token 0 token 1
hash apres :
token 0 token 1
compteur : 3
mot : token 3
hash avant :
token 0 token 1
hash apres :
token 0 token 1 token 3
compteur : 4
mot : token 4
hash avant :
token 0 token 1 token 3
hash apres :
token 0 token 1 token 3 token 4
compteur : 5
mot : token 5
hash avant :
token 0 token 1 token 3 token 4
hash apres :
token 0 token 1 token 3 token 4 token 5
je te rappelle que tu dois tester les éléments du tableau et pas celle d'un hash qui n'existe pas
pour te convaincre tu peux ajouter à la fin, après la boucle print scalar keys %tableau, "\n"; et tu verras le résultat La fonction grep permet de vérifier si le tableau contient déjà un token 106485010510997108
|
Ok, je suis pas sûr de moi donc je poursuis, imaginons que je travail sur un hash désormais et pas sur un tableau. L'ensemble clef valeur sous la forme :
#!/usr/bin/env perl
my $raison="";
my %monhash;
for(my $cpt=0; $cpt <= 5; $cpt++){
$token = "token ".$cpt;
if ($cpt == 2) { $token = "token 1"; }
print "compteur : $cpt\n";
print "mot : $token\n";
print "hash avant : \n\t";
print %monhash;
if (exists $monhash{$token}) {
$monhash{$token}++;
} else {
push %monhash, $token
}
print "\n";
print "hash apres : \n\t";
print %monhash;
print "\n\n";
} |
Répondre à lami20j
|