2016-11-04 4 views
1

のために私は多次元配列があります。アクセスは、すべての配列

@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

:外側アレイ上の各ループのために、我々は$elem_num変数を使用して、その後、(配列リファレンスである)各要素を取り、我々は、内部配列の最初の要素の内容をプリントアウト ' @multiarray [0] 'は単一要素の配列スライスです。 '$ multiarray [0]'は配列のオフセット0でスカラーにアクセスしています。実際にスライスを使用しない限り、後者の構文を使用することをお勧めします。 Perlでは* sigil *が我々が扱っている価値の種類に従っていることに注意してください。したがって、 '$ 'はハッシュや配列などの集約データ型のコンポーネントであっても、単一のスカラーを表します。 – DavidO

+2

DavidOのコメントに関連して、常に 'use strict;'と 'use warnings 'all';'を必ず確認してください。警告を有効にすると、 '@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_num0に設定しました。ちょうどFYI

my $elem_num = 0; 

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

ありがとうございました。 – brucezepplin

関連する問題