Arrays 查找数组中最低值的索引
我有3个数组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
@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包装器?