我有一个带有5个键的哈希,每个键都有5个值
foreach $a(@mass){
if($a=~some regex){
@value=($1,$2,$3,$4,$5);
$hash{"keysname$c"}="@value";
c++;
}
}
每个标量都是不同参数的值,我必须确定散列中所有键的第一个数组的最高值
编辑:
代码必须将key1的第一个值与key2,key3 ... key5的第一个值进行比较并打印最高值
答案 0 :(得分:3)
这将打印结构的最大值,如
my %hash = ( k1 => [6,4,1], k2 => [16,14,11] );
use List::Util qw(max);
# longest array
my $n = max map $#$_, values %hash;
for my $i (0 .. $n) {
my $max = max map $_->[$i], values %hash;
print "max value on position $i is $max\n";
}
和字符串,
my %hash = ( k1 => "6 4 1", k2 => "16 14 11" );
use List::Util qw(max);
# longest array
my $n = max map $#{[ split ]}, values %hash;
for my $i (0 .. $n) {
my $max = max map [split]->[$i], values %hash;
print "max value on position $i is $max\n";
}
答案 1 :(得分:3)
如果我理解你的问题(并且有点不清楚),那么我认为你想要这样的事情:
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
use List::Util 'max';
my (@data, @max);
while (<DATA>) {
chomp;
push @data, [split];
}
for my $i (0 .. $#{$data[0]}) {
push @max, max map { $_->[$i] } @data;
}
say "@max";
__DATA__
93 3 26 87 7
66 96 46 77 42
26 3 71 64 91
31 27 14 40 86
82 72 71 34 7
答案 2 :(得分:1)
试试这个
map {push @temp, @{$_}} values %hash;
@desc_sorted= sort {$b <=> $a} @temp;
print $desc_sorted[0],"\n";
map会将所有列表合并到一个列表中,sort会按降序对该合并数组进行排序。