21

我有一个值为33, 32, 8, 100的数组。

如何在这个数组中找到最大值和最小值?

我需要包含任何特殊的库吗?

4

12 回答 12

40

List::Utilmin并且max很好,

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

但是List::MoreUtilsminmax在您同时需要最小值和最大值时效率更高(因为它进行的比较较少)。

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

List::Util 是核心的一部分,但 List::MoreUtils 不是。

于 2012-05-22T15:33:18.333 回答
22

没有模块:

#!/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";
于 2012-05-22T13:50:45.887 回答
21

你可以用它List::Util来轻松地做到这一点,例如。

use List::Util qw(min max);
my @arr = (33, 32, 8, 100);
print min(@arr)," ", max(@arr), "\n";
于 2012-05-22T11:38:00.797 回答
16

提供的解决方案很好,但如果您想自己实现它,它非常简单:

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";
于 2012-05-22T13:44:18.877 回答
3

对于数字:

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

对于字符串:

    my ($min,$max) = (sort {$a cmp $b} @array)[0,-1];
于 2015-07-06T19:41:02.130 回答
2

您可以使用 map 来执行此操作而无需库:

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";
于 2015-10-02T09:25:10.033 回答
1

您应该使用List::Util自 v5.7.3 以来随 Perl 发行版一起发布的它,因此可能不需要安装。

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
于 2012-05-22T11:40:18.863 回答
1

当然,如果你同时想要一个列表的最大值和最小值,那么同时获取两者更有效;它只需要对每 2 项数据执行 3 次顺序比较,而不是 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;
于 2012-05-23T15:07:04.253 回答
0

我认为List::Util是您正在寻找的。

于 2012-05-22T11:37:56.347 回答
0

您可以使用Statistics::Lite计算最小值、最大值等

于 2012-05-22T11:37:58.823 回答
0

使用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
于 2012-05-22T11:38:11.140 回答
0

List::Util具有“max”和“min”函数,您可以使用它们直接找到给定数字列表的最大值和最小值。检查你是否可以使用它。您也可以对数组进行排序,然后确定最高和最低的数字

于 2012-05-22T11:38:17.870 回答