2017-01-19 80 views
1

如何連接兩個地圖的輸出以形成單個平面陣列?Perl的合併結果地圖

我試圖用這個:

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 ge的結果ts迭代了第一個map

回答

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 } }, 
] 

這也可以看出f從你的輸出,所有密鑰都是i(no j s)。