2013-04-09 8 views
10

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?

+0

Sie den Begriff eines Satzes verwenden können: http://stackoverflow.com/questions/3700037/how-can-i- represent-sets-in-perl – akonsu

+0

Es gibt immer die Funktion "List :: MoreUtils uniq", wenn Sie dem CPAN nicht entgegenstehen. – squiguy

Antwort

12

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) ... 
+2

Wow, das muss ein neuer Rekord sein: Antwort wurde 4 Jahre später angenommen :) – mvp

+1

Er musste sicher sein, dass das funktionierte. ; P –

12
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.

+1

Diese Lösung wird sehr ineffizient, da das Array groß wird - die Hash-Methode ist vorzuziehen. –

3

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"; 
} 
+0

Kurz gesagt: 'push (@yourarray, $ yourvalue), außer $ yourvalue ~~ @yourarray;' – Codr

Verwandte Themen