如果满足条件,则向数组添加值

Pit*_*Pit 6 arrays perl if-statement perl-data-structures

我正在构建一组数组哈希

my @array = (
    {label => 'first hash'},
    {label => 'second hash',
     innerarray => [
        {label => 'first inner hash'},
        {label => 'second inner hash'},
      ]
    },
);
Run Code Online (Sandbox Code Playgroud)

有没有办法只在条件满了时才添加第二个内部哈希?像这样的东西:

my @array = (
    {label => 'first hash'},
    {label => 'second hash',
     innerarray => [
        {label => 'first inner hash'},
        {label => 'second inner hash'} if 1==1,
      ]
    },
);
Run Code Online (Sandbox Code Playgroud)

我尝试使用push重写代码:

my @innerarray = ();
push @innerarray, {label => 'first inner hash'};
push @innerarray, {label => 'second inner hash'} if 1==1;

my @array = (
    {label => 'first hash'},
    {label => 'second hash',
     innerarray => \@innerarray
    },
);
Run Code Online (Sandbox Code Playgroud)

但它变得非常难以辨认,因为我必须在使用它们之前预定义所有内部数组,在某些情况下,在使用之前有几百行代码.

有没有办法直接在插入数组元素的地方添加if-condition?

dax*_*xim 9

使用条件运算符,它可用作表达式.

my @array = (
    {label => 'first hash'},
    {
        label      => 'second hash',
        innerarray => [
            {label => 'first inner hash'},
            (1 == 1)
                ? {label => 'second inner hash'}
                : (),
        ]
    },
);
Run Code Online (Sandbox Code Playgroud)


dgw*_*dgw 6

您正在innerarray(示例1)中存储数组引用,但在重写时,您尝试存储数组.
试试这个:

my @innerarray = () ;
push @innerarray, {label => 'first inner hash'};
push @innerarray, {label => 'second inner hash'} if 1==1; # Not a real condition ...

my @array = (
    {label => 'first hash'},
    {label => 'second hash',
     innerarray => \@innerarray
    },
) ;
Run Code Online (Sandbox Code Playgroud)

你也错过了;两次.

关于内联某些内容的问题......

my @array = (
    {label => 'first hash'},
    {label => 'second hash',
     innerarray => [
        {label => 'first inner hash'},
        ( $condition == 1 ? {label => 'second inner hash'} : () ) ,
      ]
    },
) ;
Run Code Online (Sandbox Code Playgroud)