Как избежать нажатия повторяющихся значений в массив Perl

Мне нужно добавить уникальные элементы в массив из входов, содержащих несколько повторяющихся значений.

Как избежать дублирования значений в массиве Perl?

Ответ 1

Вам просто нужно использовать хеш следующим образом:

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

Это автоматически перезапишет дублирующиеся ключи.

Когда вам нужно распечатать его, просто используйте:

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

Если вам нужно сортировать ключи, используйте

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

Ответ 2

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

Это проверяет, присутствует ли значение в массиве перед нажатием. Если значение отсутствует, оно будет нажато.

Если значение не является числовым, вы должны использовать eq вместо ==.

Ответ 3

используя ~~, мы можем использовать минимальный 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";
}