2016-11-04 119 views
1

我有一個多維數組:接入子排列/打印第n個元素,每一個陣列

@multarray = ([ "one", "two", "three" ], 
       [ 4, 5, 6, ], 
       [ "alpha", "beta", "gamma" ] 
      ); 

我可以訪問@multarray[0]

[ 
    [0] [ 
     [0] "one" 
     [1] "two" 
     [2] "three" 
    ] 
] 

甚至@multarray[0][0]

"one" 

但如何訪問每個子數組的第一個子元素?類似於multarray[*][0]這樣產生的東西:

"one" 
4 
"alpha" 

謝謝!

+1

只是一個供參考:' @multiarray [0]'是一個單元素數組切片。 '$ multiarray [0]'正在訪問數組中偏移量爲零的標量。更喜歡後者的語法,除非你真的打算使用切片。請記住,在Perl中,* sigil *遵循我們正在使用的值的類型。因此,'$'用於單個標量,即使它是聚合數據類型的組件,例如散列或數組。 – DavidO

+2

與DavidO的評論相關,請確保您總是'嚴格使用';'和'使用警告'全部';'。啓用警告後,'@multarray [0]'會給出警告:「標量值@multarray [0]寫得更好$ multarray [0]」 – ThisSuitIsBlackNot

+0

我建議您更喜歡'Data :: Dump'或'Data :: Dumper在格式化數據以便在問題中進行演示時,通過'Data :: Printer'。最後一個可以在命令提示符下用於個人使用,但它會增加額外的信息,這些信息可能會在上下文中混淆,尤其是對不熟悉該模塊的用戶。 – Borodin

回答

7

您可以使用map和取消引用每個數組:

use warnings; 
use strict; 
use Data::Dumper; 

my @multarray = ( 
    [ "one", "two", "three" ], 
    [ 4, 5, 6, ], 
    [ "alpha", "beta", "gamma" ] 
); 

my @subs = map { $_->[0] } @multarray; 
print Dumper(\@subs); 

__END__ 

$VAR1 = [ 
      'one', 
      4, 
      'alpha' 
     ]; 

參見:perldsc

+1

非常感謝。 – brucezepplin

3

使用for()循環,您可以循環外陣列上,並使用任何內部元素。在這個例子中,我將$elem_num設置爲0,這是第一個元素。對於每一個循環的外陣列上,我們採取每個元素(這是一個數組引用),然後,使用$elem_num變量,我們打印出內陣列的第一個元素的內容:

my $elem_num = 0; 

for my $elem (@multarray){ 
    print "$elem->[$elem_num]\n"; 
} 
+1

非常感謝。 – brucezepplin

相關問題