在perl中填充多维数组的哈希值

时间:2010-11-09 21:05:12

标签: arrays perl hash multidimensional-array

给定三个标量,填充哈希的perl语法是什么,其中一个标量是关键,另一个确定填充两个数组中的哪一个,第三个是附加到其中一个数组?例如:

my $weekday = "Monday";
my $kind    = "Good";
my $event   = "Birthday";

并且只给出了在循环中获得的标量而不是它们的特定值,我想要一个哈希:

my %Weekdays = {
      'Monday' => [
                    ["Birthday", "Holiday"],     # The Good array
                    ["Exam", "Workday"]          # The Bad array
                  ]
      'Saturday' => [
                    ["RoadTrip", "Concert", "Movie"],
                    ["Yardwork", "VisitMIL"]
                  ]
}

我知道如何在散列中向数组附加值,例如,如果键是单个数组:

push( @{ $Weekdays{$weekday} }, $event);

在循环中使用,可以给我:

%Weekdays = {
        'Monday' => [
                    'Birthday',
                    'Holiday',
                    'Exam',
                    'Workday'
                    ]
}

我认为哈希键是特定的工作日,值应该是二维数组。我不知道perl语法,比如,将生日进入哈希作为工作日数组的元素[0] [0],并且下一次通过循环,将另一个事件推送到[0] [1]或[1] [0]。同样,我不知道访问它的语法。

2 个答案:

答案 0 :(得分:3)

使用你的变量,我会这样写:

push @{ $Weekdays{ $weekday }[ $kind eq 'Good' ? 0 : 1 ] }, $event;

但是,我可能只是制作好/坏说明符。鉴于我的笨蛋:

use autobox::Core; 
( $Weekdays{ $weekday }{ $kind } ||= [] )->push( $event );

请注意我在这里写的方式,在开始之前,表达式都不关心数组是否存在。

答案 1 :(得分:1)

有什么理由

 push @{ $Weekdays{Monday}[0] }, "whatever";

不适合你吗?