2016-11-04 3 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" 

Но как я могу получить доступ к 1-му подэлементу каждого вспомогательного массива? что-то похожее на multarray[*][0] так производят:

"one" 
4 
"alpha" 

Спасибо!

+1

Просто FYI: ' @multiarray [0] '- срез массива одного элемента. '$ multiarray [0]' обращается к скаляру со смещением нуля в массиве. Предпочитайте последний синтаксис, если вы действительно не собираетесь использовать срез. Помните, что в Perl * sigil * следует за типом ценности, с которым мы работаем. Таким образом, '$' предназначен для одного скаляра, даже если он является компонентом совокупного типа данных, такого как хэш или массив. – DavidO

+2

Связано с комментарием DavidO, убедитесь, что вы всегда используете 'strict ', и' используете предупреждения' all '; '. При включенном предупреждении '@multarray [0]' даст предупреждение «Скалярное значение @multarray [0] лучше написано как $ multarray [0]" – ThisSuitIsBlackNot

+0

Я рекомендую вам выбрать 'Data :: Dump' или' Data :: Dumper 'over' 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

Смежные вопросы