如何在Perl中的整数数组中找到最大值和最小值?

Ali*_*sha 14 perl

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

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

我是否需要包含任何特殊库?

ike*_*ami 31

List :: Utilmin,max很好,

use List::Util qw( min max );
my $min = min @numbers;
my $max = max @numbers;
Run Code Online (Sandbox Code Playgroud)

但是当你需要最小值和最大值时,List :: MoreUtilsminmax效率会更高(因为它的比较较少).

use List::MoreUtils qw( minmax );
my ($min, $max) = minmax @numbers;
Run Code Online (Sandbox Code Playgroud)

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


Has*_*kun 20

您可以List::Util轻松地使用,例如.

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


jm6*_*666 19

没有模块:

#!/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";
Run Code Online (Sandbox Code Playgroud)

  • 这花费了一些时间来排序它可能已经遇到的最小值和最大值之间的值,当它应该只花费O(N)时间时花费O(N log N)时间. (3认同)

fle*_*esk 11

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

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";
Run Code Online (Sandbox Code Playgroud)

  • 如果最小值或最大值为零,则中断。应该使用 `!defined($min)` 代替 `!$min` 来测试 `$min` 是否未定义(当然对于 `$max` 也是如此)。 (7认同)