在Perl中,如何在不使用哈希的情况下在数组中找到重复值?

bha*_* Bs -5 perl

可能重复:
使用Perl检查数据数组中重复项的最有效方法是什么?

什么是在不使用哈希的情况下在数组中查找重复值的最佳方法,

@A = ("foo","baz","bar","foo","baz","foo");
Run Code Online (Sandbox Code Playgroud)

这是我的数组,如何只提取重复值,如:

foo
baz
@arr1 = (
          '2017554310',
          '2078991086',
          '2163824970',
          '2405206346',
          '2769562630',
          '2769562630',
          '3137026006',
          '3232651356',
          '3369962470',
          '3865302266',
          '4107452620',
          '4232926280',
          '5205689000',
          '5613613000',
          '6105668446',
          '6187592436',
          '6239350730',
          '6239350730',
          '7024698706',
          '7024698706',
          '7024698706',
          '7024698706',
          '7047088496',
          '7136929460',
          '7149705670',
          '7178455806',
          '7607491726',
          '7757710940',
          '8056423386',
          '8325522340',
          '8325522340',
          '8437352856',
          '8437352856',
          '8437352856',
          '9738570770'
        );
Run Code Online (Sandbox Code Playgroud)

Dav*_* W. 5

我不确定为什么你没有哈希限制,或者没有外部模块.如果它是标准的Perl模块之一File::Basename或者是File::Find什么?这些都带有标准的Perl安装.

你可以对阵列进行排序吗?

my @A = qw(foo baz bar foo baz foo);
my @B = sort @A;
Run Code Online (Sandbox Code Playgroud)

现在@B等于qw*bar baz baz foo foo foo).然后,您可以浏览此数组并查看先前的值是否等于最后一个值:

my @B = sort @A;
my $previous = pop @B;    #Just to start out:

foreach my $value (@B) {
   if ($previous eq $value) {  #Assuming strings only cause I can't use Scalar::Utils
      print qq("$value" is a duplicate!\n);
   }
   $previous = $value;
}
Run Code Online (Sandbox Code Playgroud)

这将打印出多个实例"foo" is a duplicate(每个副本一个).如果您不想这样做,您将不得不进行测试,看看您之前是否打印过该声明.