2016-11-04 120 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

相关问题