如何获取Perl数组中最大元素的索引?
数组最大值及对应索引的获取方案
你已经成功获取了数组的最大值,以下是两种实现获取最大值对应索引的方法:
方法1:基础遍历实现
通过循环遍历数组的索引和元素,对比找到最大值的位置:
use feature "say"; use List::Util qw(max); @x = qw(10 -2 -48 -5 7 34 28); my $max_val = max @x; my $max_index; # 遍历数组的所有索引 for my $i (0 .. $#x) { if ($x[$i] == $max_val) { $max_index = $i; last; # 仅保留第一个出现的最大值索引,若需全部可删除此行 } } say "valore massimo: $max_val"; say "indice del massimo: $max_index";
方法2:利用List::Util模块简化代码
借助pairfirst函数同时处理索引与元素,更简洁地定位目标:
use feature "say"; use List::Util qw(max pairfirst); @x = qw(10 -2 -48 -5 7 34 28); my $max_val = max @x; # 配对索引和元素,找到第一个值等于最大值的索引 my ($max_index) = pairfirst { $b == $max_val } 0 .. $#x, @x; say "valore massimo: $max_val"; say "indice del massimo: $max_index";
补充说明
- 若数组中存在多个相同的最大值,上述代码默认返回第一个出现的最大值的索引;如果需要收集所有最大值的索引,方法1可删除
last并改用数组存储索引,方法2可替换pairfirst为pairgrep来获取所有匹配项。
内容的提问来源于stack exchange,提问作者Mauro Console
相关产品推荐
相关产品推荐

