2014-03-19 54 views
0

的第1個要素我有這樣循環2D名單

[[hash,hash,hash],useless,useless,useless] 

我想通過它把散列和循環的第一個元素的列表 - 我試試這個:

my @list = get_list_somehow(); 
print Dumper($list[0][0]); print Dumper($list[0][1]);print Dumper($list[0][2]); 

,我能夠手動訪問精細的元素,但是當我嘗試這個

my @list = get_list_somehow()[0]; 
print Dumper($list[0]); print Dumper($list[1]);print Dumper($list[2]); 
foreach(@list){ 
     do_something_with($_); 
} 

$list[0]返回一個值(第一散列,everythi ng else is undefined)

+3

你能告訴您的實際數據,而不是佔位符? –

回答

3

您正在取012,的返回值的下標[0](儘管從技術上講,您需要括號)。你需要需要做的是取消引用該列表中的第一個元素。所以:

my @list = get_list_somehow(); 
my $first = $list[0];    # take first element 
my @newlist = @$first;    # dereference array ref 

當然,這是繁瑣和冗長的,如果你只是想用Data::Dumper打印數組,你可以這樣做:

print Dumper $list[0]; 

或者,如果你只是想第一陣列,你可以一步完成。雖然這看起來複雜而凌亂:

my @list = @{ (get_list_somehow())[0] }; 

@{ ... }將擴大其內部數組引用,這是希望從您從get_list_somehow()列表中的下標返回。

+0

謝謝:我用過這個 - 我的@list = @ {(get_list_somehow())[0]}; 作品 – Kevin

+0

不客氣。 – TLP

0

我要帶你的樣本數據是這樣的:

my @data = [ 
       { 
        one => 1, 
        two => 2, 
        three => 3, 
       }, 
       "value", 
       "value", 
       "value", 
      ]; 

也就是說,@data的第一要素,$data[0]您的哈希值。那是對的嗎?

你的散列是一個散列參考。那就是 到存儲該散列的存儲位置。

要獲得哈希本身,它必須是提領

my %hash = %{ $data[0] }; # Dereference the hash in $data[0] 
for my $key (keys %hash) { 
    say qq(\$hash{$key} = "$hash{$key}".); 
} 

我可以做在一個步驟中提領...

for my $key (keys @{ $data[0] }) { 
    say qq(\$data[0]->{$key} = ") . $data[0]->{$key} . qq(".); 
} 

看看在Perl Reference Tutorial爲有關如何使用參考的信息。

0

我在這裏猜測你的數據結構的位:

my $list = [ 
    [ { a => 1, 
     b => 2, 
     c => 3, }, 
    { d => 4, } 
    { e => 5, } 
    ], undef, undef, undef, 
]; 

然後我們得到的第0頂級數組引用,這是另一個數組引用的(第一個)元素,然後在第0 (第一個)元素,它是第一個散列引用:

my $hr = $list->[0][0]; 

並迭代散列鍵。這也可以寫成一步:keys %{ $list->[0][0] }。當分成兩步時,看看發生了什麼變得更容易一些。

for my $key (keys %$hr) { 
    printf "%s => %s\n", $key, $hr->{$key}; 
} 

,輸出:

c => 3 
a => 1 
b => 2