как получить все индексы максимальных повторяющихся значений в массиве в perl - PullRequest
1 голос
/ 13 ноября 2011

Привет, я новичок в Perl в процессе обучения. У меня есть массив

 @array = ( 10, 40, 59, 40, 90, 100, 30, 40, 100, 20, );

Я хочу найти максимальное число в массиве, а также узнать индекс, где максимальное число присутствует в моем массиве.

Я делаю

my $maxValue = max @array;
print $maxValue;      # displays the maximum number in the entire array

my ($index) = grep $array[$_] eq $maxValue , 0.. $#array;
print ($index);        # this gives me the index of the maximum number which was found in the array. 

Вывод, который я получаю, равен 100 с индексом 5

Но на самом деле 100 поступает 2 раза в массиве: один раз с индексом 6 и снова с индексом 8. Мой код предоставляет мне только первый найденный индекс с максимальным значением.

Как я могу получить все индексы, которые имеют максимальное значение с ними?

Ответы [ 2 ]

5 голосов
/ 13 ноября 2011
my @index = grep $array[$_] eq $maxValue , 0.. $#array;
print @index;

Кажется, самый простой способ.

Хотя для чисел вы действительно должны использовать ==, даже если, например, 100 также является допустимой строкой.

0 голосов
/ 13 ноября 2011

Это один раз через массив для определения максимального значения и всех индексов:

    use warnings;
    use strict;
    use Data::Dumper;

    my @array = ( 10, 40, 59, 40, 90, 100, 30, 40, 100, 20, );
    my %uniq;
    my $i = 0;
    my $max = 0;
    for (@array) {
        push @{ $uniq{$_} }, $i;
        $i++;
        $max = $_ if $_ > $max;
    }
    print "max=$max at indexes:\n";
    print Dumper($uniq{$max});

    __END__

    max=100 at indexes:
    $VAR1 = [
              5,
              8
            ];

Другой способ ... без хеша:

use warnings;
use strict;
use Data::Dumper;

my @array = ( 10, 40, 59, 40, 90, 100, 30, 40, 100, 20, );
my @maxs;
my $i = 0;
my $max = 0;
for (@array) {
    if ($_ > $max) {
        @maxs = $i;
        $max  = $_ ;
    }
    elsif ($_ == $max) {
        push @maxs, $i;
    }
    $i++;
}
print "max=$max at indexes:\n";
print Dumper(\@maxs);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...