Как избежать нажатия повторяющихся значений в массив 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";
}