查找数组中最低值的索引

Ale*_*AMP 0 arrays sorting perl

我有3个数组,@energy, @es_energy and @hb_energy每个数组都使用相同的名称索引[$k].

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

目前我正在使用 my $n = nmin_by { $energy[$_] } 0 .. $#energy;

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

有什么建议?

zdi*_*dim 6

使用List :: Util :: reduce

use warnings;
use strict;
use feature 'say';

use List::Util qw(reduce);

my @ary = (12, 3, 1, 23); 

my $min_idx = reduce { $ary[$a] < $ary[$b] ? $a : $b } 0..$#ary; 

say $min_idx;
Run Code Online (Sandbox Code Playgroud)

把它放在一个子程序中,以便在名称明确目的时实现不可见

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

将它放在一个模块中,您也可以通过最小的入侵来改变它的工作方式.

该错误消息可以阐述(告诉用户什么已经获得通过,例如)和补充检查; 例如,给定数字<比较,sub需要一个只有数字的数组.

语法clafirication:arrayref的最后一个元素的索引$rary$#$rary(而数组的最后一个元素的索引@ary$#ary).

仔细选择你的子程序名称; 拥有一个好名字会有很大帮助.

感谢Borodin对此问题的评论.