use warnings;
use strict;
use feature 'say';
use List::Util qw(reduce);
my @x = qw(10 -2 -48 -5 7 34 28);
my $max_idx = reduce { $x[$a] > $x[$b] ? $a : $b } 0..$#x;
say "Maximal value of $x[$max_idx] is at index $max_idx";
use strict;
use warnings;
use feature 'say';
my @x = (10, -2, -48, -5, 7, 34, 28);
my $max = 0; # first index is the max
for (0 .. $#x) {
if ($x[$_] > $x[$max]) {
$max = $_;
}
}
say "@x";
say "Max number is $x[$max] with index $max";
输出量:
10 -2 -48 -5 7 34 28
Max number is 34 with index 5
6条答案
按热度按时间km0tfn4u1#
核心List::Util自带全能的
reduce
,可以直接计算出各种结果可以用一个简单的函数来 Package 它,以便为操作提供一个清晰的名称(
max_idx
之类的,它可以返回元素及其索引,可能只在列表上下文中)。列表实用程序的库通常只是将reduce
表达式打包到方便的函数中。具有上述功能的实用程序是
max_by
,它来自List::UtilsBy,如Silvio Mayolo's answer所示(但我们不必首先创建索引数组)。一个吹毛求疵,但我想提一下。问题中给出的(显然)数字列表
qw(10 -2 -48 -5 7 34 28)
是一个字符串列表(“单词”),因为qw操作符构建了东西。一旦它们被这样使用,它们就被当作数字来处理,就像解释器通常做的那样,一切都很好。
更多的打字,但我发现它更清楚地传达了意图。同样,这对大多数(任何?)代码来说都没有任何后果。
8cdiaqws2#
x1E0F1x提供x1M1N1x,用于根据某个其它准则(其可以是另一列表)获得最大值。
一般来说,如果您要在Perl中进行重要的列表操作,我建议安装
List::AllUtils
,它是一个一体化的包,包括List::Util
、List::SomeUtils
和List::UtilsBy
。0vvn1miw3#
对于像这样的小任务,实际上不需要使用外部库。
输出量:
只需循环索引,检查值并保存编号最大的索引。
11dmarpk4#
你正在做的任务绝对是编程的基础和关键,如果你开始学习编程,你应该能够自己想出解决方案。
是的,有很好的模块,使这个任务更优雅,但如果你正在学习编程,你至少应该想出一个这样的解决方案,自己!
家庭作业:
1.如果没有传递任何元素给函数,会发生什么?应该返回什么?
1.使其与数组引用一起工作。
1.使用经典的for循环
for (..., ..., ...) { ... }
,不要使用shift
。1.如果传递字符串而不是数字,会发生什么?
1.你知道问题4的解法吗?
dly7yett5#
在这种情况下,如果你想只使用Perl,由于Perl模块安装的限制-要找到数组中最大值的索引,你可以使用以下算法:
$max
值$max
进行比较输出量
ndasle7k6#
您可以尝试以下代码
输出量