【问题标题】:Filling hash of multi-dimensional arrays in perl在perl中填充多维数组的哈希
【发布时间】:2011-05-07 12:29:15
【问题描述】:

给定三个标量,填充散列的 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]。同样,我不知道访问相同的语法。

【问题讨论】:

    标签: arrays perl hash multidimensional-array


    【解决方案1】:

    有什么原因吗

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

    不适合你?

    【讨论】:

      【解决方案2】:

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

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

      不过,我也可能只使用 Good/Bad 说明符 keys。并给我的德鲁特斯:

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

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

      【讨论】:

      • 这就是诀窍,谢谢。我也很欣赏使用散列散列代替的想法;不过,我必须先重构一些其他的东西。
      猜你喜欢
      • 1970-01-01
      • 2012-09-06
      • 1970-01-01
      • 2015-09-28
      • 1970-01-01
      • 2016-01-27
      • 2018-02-25
      • 2014-11-25
      • 2014-05-27
      相关资源
      最近更新 更多