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
Arrays 查找数组中最低值的索引_Arrays_Perl_Sorting - Fatal编程技术网

Arrays 查找数组中最低值的索引

Arrays 查找数组中最低值的索引,arrays,perl,sorting,Arrays,Perl,Sorting,我有3个数组@energy、@es\u energy和@hb\u energy,每个数组都用相同的名称术语[$k]编制索引 我想在@energy中找到最低的值,然后使用该索引值在其他数组中查找相应的值 目前我正在使用{$energy[$\]}0$#能源 然后使用$n从其他数组输出。但是,我不想使用nmin_by,因为它需要一个额外的库来下载我正在使用的软件包(大量的管理问题) 有什么建议吗 使用 使用警告; 严格使用; 使用特征“说”; 使用列表::Util qw(reduce); my@ari

我有3个数组
@energy、@es\u energy和@hb\u energy
,每个数组都用相同的名称术语
[$k]
编制索引

我想在
@energy
中找到最低的值,然后使用该索引值在其他数组中查找相应的值

目前我正在使用{$energy[$\]}0$#能源

然后使用
$n
从其他数组输出。但是,我不想使用
nmin_by
,因为它需要一个额外的库来下载我正在使用的软件包(大量的管理问题)

有什么建议吗

使用

使用警告;
严格使用;
使用特征“说”;
使用列表::Util qw(reduce);
my@ari=(12,3,1,23);
my$min_idx=reduce{$ary[$a]<$ary[$b]?$a:$b}0..$\ary;
比如$min_idx;

将其放在sub中,以便在名称阐明目的时,实现不可见

use Carp;

sub get_min_idx {
   my $ra = shift;
   croak "Sub expects array reference" if ref $ra ne 'ARRAY';
   return reduce { $ra->[$a] < $ra->[$b] ? $a : $b } 0..$#$ra;
}

my $min_idx = get_min_idx(\@ary);
使用Carp;
sub get_min_idx{
我的$ra=班次;
如果ref$ra ne‘array’,则发出“Sub-expected array reference”声;
返回reduce{$ra->[$a]<$ra->[$b]?$a:$b}0..$#$ra;
}
my$min\u idx=get\u min\u idx(\@ary);
把它放在一个模块中,你也可以改变它的工作方式,减少入侵

可以详细说明错误消息(例如,告诉用户传递了什么)并添加检查;例如,给定数值
使用

使用警告;
严格使用;
使用特征“说”;
使用列表::Util qw(reduce);
my@ari=(12,3,1,23);
my$min_idx=reduce{$ary[$a]<$ary[$b]?$a:$b}0..$\ary;
比如$min_idx;

将其放在sub中,以便在名称阐明目的时,实现不可见

use Carp;

sub get_min_idx {
   my $ra = shift;
   croak "Sub expects array reference" if ref $ra ne 'ARRAY';
   return reduce { $ra->[$a] < $ra->[$b] ? $a : $b } 0..$#$ra;
}

my $min_idx = get_min_idx(\@ary);
使用Carp;
sub get_min_idx{
我的$ra=班次;
如果ref$ra ne‘array’,则发出“Sub-expected array reference”声;
返回reduce{$ra->[$a]<$ra->[$b]?$a:$b}0..$#$ra;
}
my$min\u idx=get\u min\u idx(\@ary);
把它放在一个模块中,你也可以改变它的工作方式,减少入侵


可以详细说明错误消息(例如,告诉用户传递了什么)并添加检查;首先,给定数值
什么库?还有,你说的“名称术语”是什么意思?我指的是索引编号!我尝试在中复制和粘贴代码,但出现了以下错误:在-e行452的数组元素中使用未初始化的值。在-e第452行没有包或对象引用的情况下,无法调用方法“minu by”。哪个库?还有,你说的“名称术语”是什么意思?我指的是索引编号!我尝试在中复制和粘贴代码,但出现了以下错误:在-e行452的数组元素中使用未初始化的值。在-e第452行没有包或对象引用的情况下,无法调用方法“min_by”。List::Util是标准Perl库的一部分吗?@AlexAMP是的。如果您转到我在答案中提供的链接,您将看到它是“perldoc”——perl的文档。这说明它位于“core”(与Perl一起安装)。@AlexAMP Good:)注意,您可以对所有类型的作业使用
reduce
。可以在
perlodc-perlmodlib
中找到标准模块的列表。我认为您的建议很好(我会编写一个带有状态变量的
for
循环)但我真的不喜欢在代码中看到
减少
,因为如果不花几秒钟的时间思考,就很难看出它在做什么。也许最好通过
wrapper为其编写一个
nmin_?List::Util是标准Perl库的一部分吗?@AlexAMP是的。如果您转到我在答案中提供的链接,您将看到它是“perldoc”——perl的文档。这说明它位于“core”(与Perl一起安装)。@AlexAMP Good:)注意,您可以对所有类型的作业使用
reduce
。可以在
perlodc-perlmodlib
中找到标准模块的列表。我认为您的建议很好(我会编写一个带有状态变量的
for
循环)但我真的不喜欢在代码中看到
减少
,因为如果不花几秒钟的时间思考,就很难看出它在做什么。也许最好通过
为它编写一个
nmin\u包装器?