【问题标题】:Dynamically populating nested Perl hashes and arrays动态填充嵌套的 Perl 哈希和数组
【发布时间】:2014-03-06 21:17:43
【问题描述】:

我还没有掌握数组和散列、散列数组、散列散列等之间的区别,所以我不知道下面的代码定义了什么。有人能告诉我它是什么吗?

my $col_props = [
    {   min_w   => 50,                                                 # Minimum column width.
        max_w   => 50,                                                 # Maximum column width.
        justify => 'left',                                             # One of left|center|right ,
        font    => $pdf->corefont( "Arial", -encoding => "latin1" ),
    },
    {   min_w   => 110,                                                # Minimum column width.
        max_w   => 110,                                                # Maximum column width.
        justify => 'left',                                             # One of left|center|right ,
        font    => $pdf->corefont( "Arial", -encoding => "latin1" ),
    },
    {   min_w   => 110,                                                # Minimum column width.
        max_w   => 110,                                                # Maximum column width.
        justify => 'left',                                             # One of left|center|right ,
        font    => $pdf->corefont( "Arial", -encoding => "latin1" ),
    },
];

但是,我真正的问题是,鉴于上面的代码,我如何动态填充 $col_props

【问题讨论】:

标签: arrays perl hash


【解决方案1】:

$col_props 是对哈希数组的引用

例如,第二个条目的最大列宽是

$col_props->[1]{max_w}

如何填充它取决于您想要做什么。假设您在%column_data 中有一个列定义,那么您可以使用

将其推送到数组的末尾(将其添加到末尾)
push @$col_props, \%column_data

要修改或添加其中一个哈希的字段,只需分配给它,例如

$col_props->[2]{min_w} = 20

【讨论】:

    【解决方案2】:

    $col_props 是一个哈希数组。

    赋值中的$[ ] 表明$col_props 是一个数组引用。

    一种方法可能是这样的:

    #!/usr/bin/perl -w
    
    
    my $col_props = [
        {   min_w   => 50,                          # Minimum column width.
            max_w   => 50,                          # Maximum column width.
            justify => 'left'                     # One of left|center|right ,
        },
        {   min_w   => 110,                           # Minimum column width.
            max_w   => 110,                          # Maximum column width.
            justify => 'left'                       # One of left|center|right ,
        },
        {   min_w   => 110,                             # Minimum column width.
            max_w   => 110,                            # Maximum column width.
            justify => 'left'                           # One of left|center|right ,
        },
    ];
    
    foreach my $ref (@{$col_props}) { #1 print
      print "min_w: ". $ref->{min_w} . "\n"
      . "max_w: " . $ref->{max_w} . "\n";
    }
    
    my %new_hash = ( # create a new hash to push
      min_w => 1,
      max_w => 2,
      justify => 'right'
    );
    
    
    push @{$col_props}, \%new_hash; # pushing the new_hash reference
    print "\n";
    
    foreach my $ref (@{$col_props}) { #2 print
      print "min_w: ". $ref->{min_w} . "\n"
      . "max_w: " . $ref->{max_w} . "\n";
    }
    

    #1 print:

    min_w: 50
    max_w: 50
    min_w: 110
    max_w: 110
    min_w: 110
    max_w: 110
    

    #2 print:

    min_w: 50
    max_w: 50
    min_w: 110
    max_w: 110
    min_w: 110
    max_w: 110
    min_w: 1
    max_w: 2
    

    为了更好地理解,请查看here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-07
      • 2015-06-17
      • 1970-01-01
      • 2018-12-17
      相关资源
      最近更新 更多