Ich muss eindeutige Elemente in einem Array aus Eingaben hinzufügen, die mehrere doppelte Werte enthalten.So vermeiden Sie, doppelte Werte in ein Perl-Array zu schieben
Wie vermeide ich, doppelte Werte in ein Perl-Array zu verschieben?
Ich muss eindeutige Elemente in einem Array aus Eingaben hinzufügen, die mehrere doppelte Werte enthalten.So vermeiden Sie, doppelte Werte in ein Perl-Array zu schieben
Wie vermeide ich, doppelte Werte in ein Perl-Array zu verschieben?
Sie müssen einfach Hash wie folgt verwenden:
my %hash;
$hash{$key} = $value; # you can use 1 as $value
...
Dies wird automatisch doppelte Schlüssel überschreiben.
Wenn Sie es drucken möchten, verwenden Sie einfach:
foreach my $key (keys %hash) {
# do something with $key
}
Wenn Sie Schlüssel sortieren müssen, verwenden
foreach my $key (sort keys %hash) ...
Wow, das muss ein neuer Rekord sein: Antwort wurde 4 Jahre später angenommen :) – mvp
Er musste sicher sein, dass das funktionierte. ; P –
push(@yourarray, $yourvalue) unless grep{$_ == $yourvalue} @yourarray;
Diese prüft, ob der Wert im Array vorhanden ist, bevor drängen. Wenn der Wert nicht vorhanden ist, wird er gedrückt. Wenn der Wert nicht numerisch ist, sollten Sie eq
anstelle von ==
verwenden.
Diese Lösung wird sehr ineffizient, da das Array groß wird - die Hash-Methode ist vorzuziehen. –
unter Verwendung ~~ wir können mindestens Perl-Version ist 5.10.1
use v5.10.1;
use strict;
use warnings;
my @ARRAY1 = qw/This is array of backup /;
my @ARRAY2;
my $value = "version.xml" ;
sub CheckPush($$)
{
my $val = shift (@_);
my $array_ref= shift (@_);
unless ($val ~~ @$array_ref)
{
print "$val is going to push to array \n";
push(@$array_ref,$val);
}
return (@$array_ref);
}
@ARRAY1 = CheckPush($value,\@ARRAY1);
print "out \n";
foreach $_ (@ARRAY1) {
print "$_ \n";
}
@ARRAY2 = CheckPush ($value,\@ARRAY2);
print "out2 \n";
foreach $_ (@ARRAY2) {
print "$_ \n";
}
Kurz gesagt: 'push (@yourarray, $ yourvalue), außer $ yourvalue ~~ @yourarray;' – Codr
Sie den Begriff eines Satzes verwenden können: http://stackoverflow.com/questions/3700037/how-can-i- represent-sets-in-perl – akonsu
Es gibt immer die Funktion "List :: MoreUtils uniq", wenn Sie dem CPAN nicht entgegenstehen. – squiguy