Как найти максимальное и минимальное значение в массиве целых чисел в Perl?

У меня есть массив со значениями 33, 32, 8, 100.

Как найти максимальное и минимальное значение в этом массиве?

Нужно ли включать какие-либо специальные библиотеки?

Ответ 1

List::Util min и max в порядке,

use List::Util qw( min max );
my $min = min @numbers;
my $max = max @numbers;

Но List::MoreUtils minmax более эффективен, когда вам нужны как min, так и max (потому что он делает меньше сравнений).

use List::MoreUtils qw( minmax );
my ($min, $max) = minmax @numbers;

Список:: Util является частью ядра, но List:: MoreUtils не является.

Ответ 2

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

use List::Util qw(min max);
my @arr = (33, 32, 8, 100);
print min(@arr)," ", max(@arr), "\n";

Ответ 3

Без модулей:

#!/usr/bin/perl
use strict;
use warnings;
my @array = sort { $a <=> $b } qw(33 32 8 100);
print "min: $array[0]\n";
print "max: $array[-1]\n";

Ответ 4

Прилагаемые решения хороши, но если вы хотите реализовать его самостоятельно, это довольно просто:

use strict;
use warnings;

my @array = (33, 32, 8, 100);
my ($min, $max);

for (@array) {
    $min = $_ if !$min || $_ < $min;
    $max = $_ if !$max || $_ > $max
};

print "min: $min\n";
print "max: $max\n";

Ответ 5

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

my @array = (33, 32, 8, 100);
my ($max,$min)=(-1e99,1e99); # Initialize to values outside anything in your list
map {$max=$_ if ($_>$max); $min=$_ if($_<$min);} @array;
print "max=$max, min=$min\n";

Ответ 6

Вы должны использовать List::Util, который был выпущен с дистрибутивом Perl с версии v.5.7.3, поэтому, вероятно, не требуется установка.

use strict;
use warnings;

use feature 'say';

use List::Util qw/ max min /;

my @data = (33, 32, 8, 100);

say min @data;
say max @data;

Выход

8
100

Ответ 7

Конечно, если вы хотите одновременно как максимальное, так и минимальное значение списка, более эффективно получать оба одновременно; он должен выполнять только 3 сравнения заказов на 2 элемента данных, а не 4. Это может иметь значение, если наборы данных достаточно велики.

List::Util не предоставляет функцию minmax, но List::MoreUtils делает.

use strict;
use warnings;
use feature qw( say );

use List::MoreUtils qw( minmax );

my ( $min, $max ) = minmax @data;

say $min;
say $max;

Ответ 8

Для чисел:

    my ($min,$max) = (sort {$a <=> $b} @array)[0,-1];

Для строк:

    my ($min,$max) = (sort {$a cmp $b} @array)[0,-1];

Ответ 9

Я думаю, List:: Util - это то, что вы ищете.

Ответ 10

Вы можете использовать Statistics:: Lite для вычисления min, max и т.д.

Ответ 11

Используйте List::Util модуль, о котором рекомендуется знакомиться, так же, как List::MoreUtils:

D:\ :: perl -MList::Util=max -lwe "print max 324, 43, 53, 3532, 43"
3532

D:\ :: perl -MList::Util=min -lwe "print min 324, 43, 53, 3532, 43"
43

Ответ 12

List:: Util имеет функции "max" и "min", которые вы можете использовать для непосредственного поиска максимального и минимального заданного списка чисел. Проверьте, можете ли вы это использовать. Вы также можете отсортировать массив, а затем определить наивысшее и наименьшее число