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

Спасибо, сэр за отзыв. Я на самом деле новичок в кодировании. Позаботьтесь об этом сейчас. –