嗨,我是Perl的新手,在学习过程中。 我有一个数组
@array = ( 10, 40, 59, 40, 90, 100, 30, 40, 100, 20, );
我想找到数组中的最大数字,并且还想知道数组中存在最大数字的索引。
我在做
my $maxValue = max @array;
print $maxValue; # displays the maximum number in the entire array
my ($index) = grep $array[$_] eq $maxValue , 0.. $#array;
print ($index); # this gives me the index of the maximum number which was found in the array.
我得到的输出是100,索引为5
但实际上100在数组中会出现2次:一次在索引6处,再次在索引8.我的代码只提供了它找到的第一个索引,其中包含最大值。
如何获得具有最大值的所有索引?
答案 0 :(得分:5)
my @index = grep $array[$_] eq $maxValue , 0.. $#array;
print @index;
似乎是最简单的方法。
虽然对于数字,你真的应该使用==
,尽管例如100也是一个有效的字符串。
答案 1 :(得分:0)
这是一次通过数组来确定最大值和所有索引:
use warnings;
use strict;
use Data::Dumper;
my @array = ( 10, 40, 59, 40, 90, 100, 30, 40, 100, 20, );
my %uniq;
my $i = 0;
my $max = 0;
for (@array) {
push @{ $uniq{$_} }, $i;
$i++;
$max = $_ if $_ > $max;
}
print "max=$max at indexes:\n";
print Dumper($uniq{$max});
__END__
max=100 at indexes:
$VAR1 = [
5,
8
];
另一种方式......没有哈希:
use warnings;
use strict;
use Data::Dumper;
my @array = ( 10, 40, 59, 40, 90, 100, 30, 40, 100, 20, );
my @maxs;
my $i = 0;
my $max = 0;
for (@array) {
if ($_ > $max) {
@maxs = $i;
$max = $_ ;
}
elsif ($_ == $max) {
push @maxs, $i;
}
$i++;
}
print "max=$max at indexes:\n";
print Dumper(\@maxs);