Perl создание хэша, где значения являются массивом - PullRequest
0 голосов
/ 05 мая 2018

У меня есть файл в следующем формате

a1 1901 score1
a2 1901 score2
a3 1902 score3
a4 1902 score4
a5 1903 score6
a6 1903 score7

Я хочу создать хеш каждого года и значения в первом столбце, соответствующие этому году, в виде массива (что означает год в качестве ключа хеша, а значения в первом столбце в виде массива значений). Как это сделать с помощью perl ..

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Итак, следующим шагом было найти строку, соответствующую максимальному количеству очков, я написал что-то вроде этого. Это дает мне в год, что такое максимальный балл, но я не могу получить индекс рассчитанного максимума, чтобы использовать его для печати соответствующих значений в столбце 1. Например: если для 1901 года оценка2 является максимальной, то я хочу вывести

a2 1901 score2

Но с моим текущим кодом я могу печатать только

1901 score2

use strict;
use warnings;
use List::Util qw( min max );
use Data::Dumper;
my $file=shift;
open (DATA, $file);
my %h1;
my @tmp;
my $max_value;
my $a;
my $b;
while (my $line = <DATA>) {
  chomp $line;
  my ($val, $year, $score) = split /\s+/, $line;
  push @{$h1{$year}}, $val;
  push @{$h1{$year}}, $score;
}
foreach my $x (sort keys %h1)
{
        foreach (@{$h1{$x}})
        {
                if ($_=~/^[0-9]/)
                {
                        push @tmp, $_;
                }
$max_value= max @tmp;
        }
        print "$x\t$max_value\n";
}
print Dumper \%h1;
0 голосов
/ 05 мая 2018

Вы должны прочитать о autovivification:

#!perl

use strict;
use warnings;

use Data::Dumper; 

my %h;
while (my $line = <DATA>) {
  chomp $line;
  my ($val, $year) = split /\s+/, $line;

  push @{$h{$year}}, $val;
}

print Dumper \%h;
# $VAR1 = {                   
#          '1901' => [       
#                      'a1', 
#                      'a2'  
#                    ],      
#          '1902' => [       
#                      'a3', 
#                      'a4'  
#                    ],      
#          '1903' => [       
#                      'a5', 
#                      'a6'  
#                    ]       
#        };                  
__DATA__
a1 1901 score1
a2 1901 score2
a3 1902 score3
a4 1902 score4
a5 1903 score6
a6 1903 score7
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...