我正在做一个子程序,它以数字列表作为参数.我想做的是检查该列表中是否有重复值.如果有重复的数字,请打印一条消息并停止该程序.如果没有重复的数字,继续执行.
例如:
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的新手.
谢谢!
我会这样做:
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)