提问者:小点点

在哈希中找到最高值


我有一个有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个答案

匿名用户

这将打印结构的最大值,例如

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";
}

匿名用户

如果我正确理解了你的问题(有点不清楚),那么我想你想要这样的东西:

#!/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

匿名用户

试试这个

    map {push @temp, @{$_}} values %hash;
    @desc_sorted= sort {$b <=> $a} @temp;
    print $desc_sorted[0],"\n";

map将所有列表合并到一个列表中,sort将按降序对合并数组进行排序。