查找数组中最低值的索引

时间:2017-10-24 19:38:11

标签: arrays perl sorting

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

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

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

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

有什么建议吗?

1 个答案:

答案 0 :(得分: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;

将其放在子目录中,以便在名称明确目的时实现不可见

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);

将它放在一个模块中,你也可以用最小的入侵来改变它的工作方式。

可以详细说明错误消息(例如告诉用户已经传递了什么)并添加了检查;例如,给定数字<比较,sub需要一个只有数字的数组。

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

仔细选择您的子程序名称;有一个好名字可以帮助很多。

感谢Borodin评论对此的需求。