2017-02-14 4 views
0

私は引数として数値のリストを取るサブルーチンをやっています。私がしたいのは、そのリストに繰り返し値があるかどうかをチェックすることです。繰り返し番号がある場合は、メッセージを印刷してプログラムを停止します。繰り返し番号がない場合は、実行を続行します。例えば値が配列で繰り返されるかどうかをテストするにはどうすればよいですか?

if (there_is_number_repeated){ 
    print "There is a number repeated";} 
else{ 
    run this code...} 

私はそのリストの値を持つハッシュを作成し、これをやろうとしている、と値> 1がないか確認してくださいました。

use strict; 
    use warnings; 

sub name_subroutine{ 
    my (@numbers)[email protected]_; 
    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; 
} 
} 

ここではわからないところです。素人な方法でこれを行う方法はありますか?私はPerlの初心者です。

ありがとうございます!

+0

あなたは 'table'と' tabla'の両方を書きました。おそらく、変数名を英語に翻訳しようとしました。次回は、翻訳したり、翻訳後もスクリプトが同じように動作するようにする必要はありません。 – Dada

答えて

8

私はどうなる:既存のコードで

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

(夫婦の修正と):あなたが存在するかどうかを確認する必要はありません

my %table=(); 

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

+= 1または++を実行すると、存在しない場合は1に設定されます。そして、あなたは、あなたが、鍵をしたい(これらは、各配列値が検出された回数だけカウントしている)の値をしたくない、特にそれらの対象の値が> 1は次のとおりです。

my @repeated = grep $table{$_} > 1, keys %table; 
0

試してみた。乾杯。

+1

答えの時間複雑さ(_O(n * n)_)は、ysthのものよりもはるかに言及する必要があります。 (しかしあなたの空間の複雑さは彼よりも低いです) – Dada

+0

あなたのレビューをいただきありがとうございます。私は実際にコーディングで初心者です。今からそれを世話するだろう。 –

関連する問題