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

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

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

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

▶ Run
#!/usr/bin/perl

use List::Util qw(min);

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

print min(@arr);

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

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

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

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

▶ Run
#!/usr/bin/perl

use List::Util qw(min);

my @arr;

my $min = min(@arr);

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

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

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

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

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

Вот пример. Результат min(12, 'ABC', 44) будет строка 'ABC'. Так происходит из-за того что числовое значение строки 'ABC' — это ноль, ноль — это самое маленькое значение в этом массиве. Результат min — это элемент у которого числовое значение минимально. В этом примере это строка 'ABC'.

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

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

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

  min
        my $num = min @list;

    Similar to "max" but returns the entry in the list with the lowest
    numerical value. If the list is empty then "undef" is returned.

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

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

Комментарии