如何避免将重复值推送到Perl数组中

时间:2013-04-09 06:25:46

标签: arrays perl

我需要在包含多个重复值的输入中添加数组中的唯一元素。

如何避免将重复值推送到Perl数组中?

4 个答案:

答案 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/ );