Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Perl中查找整数数组中的最大值和最小值?_Perl - Fatal编程技术网

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

如何在Perl中查找整数数组中的最大值和最小值?,perl,Perl,我有一个值为33,32,8100的数组 如何在此数组中找到最大值和最小值 我需要包括任何特殊的库吗?我想这就是你要找的。你可以用它来计算最小值、最大值等你可以很容易地用它来计算,例如 use List::Util qw(min max); my @arr = (33, 32, 8, 100); print min(@arr)," ", max(@arr), "\n"; 使用,建议您无论如何都要熟悉它,就像List::MoreUtils: D:\ :: perl -MList::Util=max

我有一个值为33,32,8100的数组

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

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

我想这就是你要找的。

你可以用它来计算最小值、最大值等

你可以很容易地用它来计算,例如

use List::Util qw(min max);
my @arr = (33, 32, 8, 100);
print min(@arr)," ", max(@arr), "\n";
使用,建议您无论如何都要熟悉它,就像
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
具有“max”和“min”函数,可用于在给定的数字列表中直接查找最大值和最小值。看看你能不能用。您还可以对数组进行排序,然后确定应该使用的最高和最低数字,该数字自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

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

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";
使用严格;
使用警告;
my@array=(33,32,8100);
我的($min,$max);
for(@array){
$min=$\uIf!$min |$\uIf<$min;
$max=$\uuIf!$max | |$\uIf>$max
};
打印“最小:$min\n”;
打印“最大:$max\n”;
不带模块:

#!/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";
#/usr/bin/perl
严格使用;
使用警告;
my@array=sort{$a$b}qw(33328100);
打印“最小:$array[0]\n”;
打印“最大:$array[-1]\n”;
min
max
很好

use List::Util qw( min max );
my $min = min @numbers;
my $max = max @numbers;
但是当您同时需要最小值和最大值时,
minmax
的效率更高(因为它进行的比较更少)


List::Util是core的一部分,但List::MoreUtils不是。当然,如果您希望同时获取列表的最大值和最小值,那么同时获取这两个值会更有效;它只需对每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;
有关数字:

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

您可以使用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";
my@array=(33,32,8100);
我的($max,$min)=(-1e99,1e99);#初始化为列表中任何外部的值

map{$max=$\uIf($\u>$max);$min=$\uIf($\u实际上我刚刚看到ikegami已经给出了上面的
List::MoreUtils
答案。很抱歉重复了。这花费了一点时间来排序它可能已经遇到的介于min和max之间的值,在应该只需要O(N)的时候需要O(N log N)时间在Webwork内部编程,使用ApachePerl,没有模块,我没有“排序”。我该如何解决这个问题?@Echeban排序是每个perl的一个内部函数,不需要任何模块。请检查
perldoc-f sort
man perlfunc
。Webwork使用Apache perl并在评估PG文件时抛出此错误(eval 2211)第20行的操作掩码捕获的“排序”
在Webwork中,任何Perl(在其上下文中)无效的内容因此trapped@Echeban由于排序的比较代码可能存在潜在的不安全性,因此PG会抛出错误。请检查互联网上的错误,可能还会有更多错误。或者在此询问一个额外的错误特定问题-因为我不是PG专家,也不是网络工作专家,所以我不知道正确的方法。如果未收集结果,请使用
f或
更清晰。如果最小值或最大值为零,则中断。应使用
!defined($min)
代替
!$min
,以测试
$min
是否未定义(对于couse的
$max
也一样)。
    my ($min,$max) = (sort {$a cmp $b} @array)[0,-1];
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";