Как найти максимальное число в Perl массиве

Задача. В Perl программе есть массив @arr (первые три буквы от слова "array"). Нужно найти максимальное число, которое есть в этом массиве.

Самый лучший способ для решения этой задачи — это использовать функцию max из библиотеки List::Util. Библиотека List::Util идет вместе с Perl, так что если у вас есть Perl, то эта библиотека сразу доступна, дополнительно устанавливать ничего не нужно.

Вот пример программы, которая находит и выводит на экран максимальное число из массива в котором содержатся числа:

▶ Run
#!/usr/bin/perl

use List::Util qw(max);

my @arr = (1, 2, -100, 8, 0);

print max(@arr);

Программа выведет на экран число 8. (Выполнить этот код в браузере ).

При подключении библиотеки мы указали что мы будем использовать функцию max: use List::Util qw(max);. Если же просто подключить библиотеку use List::Util;, то программа выдаст ошибку Undefined subroutine &main::max called at script.pl line 7..

В массиве нет ни одного элемента

В том случае если в массиве нет ни одного элемента, то max вернет undef. Вот пример программы, которая учитывает такой случай:

▶ Run
#!/usr/bin/perl

use List::Util qw(max);

my @arr;

my $max = max(@arr);

if (defined $max) {
    print $max;
} else {
    print "Empty array";
}

В этой программе мы сохраняем результат функции max в переменную, если результат не undef, то выводим этот результат, если же undef, то выводим текст на экран.

Тут мы проверяем результат работы функции max, но можно было бы узнать количество элементов в массиве и если колличество элементов 0, то выполнить то что нужно сделать в случае пустого массива.

Работа в случае если в массиве есть строки

При работе с функцией max из библиотеки List::Util есть одна тонкость. На самом деле max возвращает не максимальное число из массива, а элемент, чье представление в виде числа является максимальным.

Вот пример. Результат max(-100, 'ABC', -4) будет строка 'ABC'. Так происходит из-за того что числовое значение строки 'ABC' — это ноль, ноль — это самое большое значение в этом массиве, поэтому будет результ является элемент с самым большим числовым значением. В этом примере это строка 'ABC'.

Еще один пример. Результат max(1, 7, '10W') будет строка '10W'.

Официальная документация

Вот фрагмент вывода команды perldoc List::Util  про функцию max:

  max
        my $num = max @list;

    Returns the entry in the list with the highest numerical value. If the
    list is empty then "undef" is returned.

        $foo = max 1..10                # 10
        $foo = max 3,9,12               # 12
        $foo = max @bar, @baz           # whatever

Другие статьи

Комментарии