我需要在包含多个重复值的输入中添加数组中的唯一元素。
如何避免将重复值推送到Perl数组中?
答案 0 :(得分:16)
push(@yourarray, $yourvalue) unless grep{$_ == $yourvalue} @yourarray;
这将在推送之前检查数组中是否存在该值。如果该值不存在,则会被推送。
如果值不是数字,则应使用eq
代替==
。
答案 1 :(得分:14)
你只需要像这样使用哈希:
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 :(得分: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";
}
答案 3 :(得分:0)
另一个解决方案。
push(@yourarray, $yourvalue) if( "@yourarray" !~ /\b$yourvalue\b/ );