在哈希中找到最高价值

时间:2014-02-10 09:29:09

标签: perl hash

我有一个带有5个键的哈希,每个键都有5个值

foreach $a(@mass){
   if($a=~some regex){
       @value=($1,$2,$3,$4,$5);
       $hash{"keysname$c"}="@value";
       c++;
    }
}

每个标量都是不同参数的值,我必须确定散列中所有键的第一个数组的最高值

编辑:

代码必须将key1的第一个值与key2,key3 ... key5的第一个值进行比较并打印最高值

3 个答案:

答案 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会按降序对该合并数组进行排序。