2017-02-14 76 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

謝謝主席先生的評論。我實際上是編碼方面的新手。將從現在開始照顧它。 –

相關問題