2013-04-09 16 views
10

Ho bisogno di aggiungere elementi univoci in un array da input che contengono diversi valori duplicati.Come evitare di inserire valori duplicati in un array Perl

Come evitare di inserire valori duplicati in un array Perl?

+0

è possibile utilizzare la nozione di insieme: http://stackoverflow.com/questions/3700037/how-can-i- represent-sets-in-perl – akonsu

+0

Esiste sempre la funzione uniq: List :: MoreUtils' se non si è contrari al CPAN. – squiguy

risposta

12

è sufficiente utilizzare hash come questo:

my %hash; 
$hash{$key} = $value; # you can use 1 as $value 
... 

Questo sovrascriverà automaticamente duplicati delle chiavi.

Quando è necessario stamparla, è sufficiente utilizzare:

foreach my $key (keys %hash) { 
    # do something with $key 
} 

Se è necessario ordinare le chiavi, utilizzare

foreach my $key (sort keys %hash) ... 
+2

Wow, questo deve essere un nuovo record: risposta accettata 4 anni dopo :) – mvp

+1

Doveva essere sicuro che funzionasse. ; P –

12
push(@yourarray, $yourvalue) unless grep{$_ == $yourvalue} @yourarray; 

Questo controlla se il valore è presente nella matrice prima spingendo. Se il valore non è presente, verrà spinto.

Se il valore non è numerico, utilizzare eq anziché ==.

+1

Questa soluzione diventa molto inefficiente man mano che l'array cresce grande: il metodo hash deve essere preferito. –

3

utilizzando ~~ possiamo versione minima Perl è 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

In breve: 'push (@yourarray, $ yourvalue) a meno di $ yourvalue ~~ @yourarray;' – Codr

Problemi correlati