如何测试数组中是否重复某个值?

Enr*_*que 0 perl

我正在做一个子程序,它以数字列表作为参数.我想做的是检查该列表中是否有重复值.如果有重复的数字,请打印一条消息并停止该程序.如果没有重复的数字,继续执行.

例如:

if (there_is_number_repeated){
    print "There is a number repeated";}
else{
    run this code...}
Run Code Online (Sandbox Code Playgroud)

我试图用这个列表的值创建一个哈希值,然后检查是否有值> 1.

    use strict;
    use warnings;

sub name_subroutine{
    my (@numbers)=@_;
    my $n=scalar(@numbers);

    my %table=();

    foreach my $i(@numbers){
    if (exists $tabla{$i}){
        $tabla{$i}+=1;}
    else{
        $tabla{$i} = 1;
    }
my @values = values %tabla;
}
}
Run Code Online (Sandbox Code Playgroud)

它在这里,我不知道继续.有没有办法以业余的方式做到这一点?我是Perl的新手.

谢谢!

yst*_*sth 8

我会这样做:

my %uniq;
if ( grep ++$uniq{$_} > 1, @numbers ) {
     # some numbers are repeated
}
Run Code Online (Sandbox Code Playgroud)

在您现有的代码中(有一些更正):

my %table=();

foreach my $i(@numbers){
    if (exists $table{$i}){
        $table{$i}+=1;}
    else{
        $table{$i} = 1;
    }
}
my @values = values %table;
Run Code Online (Sandbox Code Playgroud)

你不需要检查存在; 如果它不存在,则执行+= 1++将其设置为1.并且您不希望值(这些只是每个数组值被发现的次数),您想要键,特别是值> 1的键:

my @repeated = grep $table{$_} > 1, keys %table;
Run Code Online (Sandbox Code Playgroud)