如何连接两个贴图的输出以形成单个平面阵列?
我试图用这个:
my $test = {'foo' =>
[map {
{'i' => "$_",
}
} 0..1,
map {
{'j' => "$_",
}
} 0..1],
};
为了达到这个目的的结果:
my $test = {'foo' => [
{
'i' => '0'
},
{
'i' => '1'
},
{
'j' => '0'
},
{
'j' => '1'
},
]}
但是,这就是我在$test
中得到的内容:
{
'foo' => [
{
'i' => '0'
},
{
'i' => '1'
},
{
'i' => 'HASH(0x7f90ad19cd30)'
},
{
'i' => 'HASH(0x7f90ae200908)'
}
]
};
看起来第二个map
的结果会被第一个map
迭代。
答案 0 :(得分:4)
第二个map
是第一个0..1,
的输入列表的一部分。
括号可以修复
use warnings;
use strict;
use Data::Dump;
my $test = {
'foo' => [
( map { { i => $_ } } 0..1 ),
( map { { j => $_ } } 0..1 )
],
};
dd($test);
打印
{ foo => [{ i => 0 }, { i => 1 }, { j => 0 }, { j => 1 }] }
我删除了不需要的引号,如果/在您的申请中需要,请将其恢复。
在没有括号的情况下,使用逗号后的map
来生成第一个map
的输入列表的下一个元素,因此您实际拥有
map { i => $_ } (0..1, LIST);
考虑
my @arr = (
map { { 'i', $_ } }
0..1,
qw(a b),
map { ( { 'j', $_ } ) } 0..1
);
dd(\@arr);
打印
[ { i => 0 }, { i => 1 }, { i => "a" }, { i => "b" }, { i => { j => 0 } }, { i => { j => 1 } }, ]
从输出中也可以看到这一点,其中所有键都是i
(没有j
s)。