2010-09-09 2 views
2

Я думаю, что мне нужен массив Массив Хэша, но я понятия не имею, как это сделать.Как создать массив массивов хэшей Perl?

Может ли Perl это сделать?

И если да, как выглядел бы код?

+2

Зачем вам нужен массив массивов хешей? Иногда, если вы сообщаете нам, что вам нужно моделировать, мы можем помочь вам разобраться в более конкретных примерах (или если AoAoH подходит для этого). –

ответ

4
my $aah = 
     [ # outer array 
       [ # first inner array 
         { # first inner hash 
           foo => 'bar', 
         }, 
         { # second inner hash 
           bar => 'baaz', 
         }, 
       ], 
       [ # secnd inner array 
         #... 
       ], 
       # ... 
     ]; 

Вы можете получить доступ к элементам, как это:

$aah->[0]->[1]->{bar} # => 'baaz' 
+1

Или '$ aah -> [0] [1] {bar}' ... все в массиве или хеше - это скаляр, поэтому любые подструктуры можно считать ссылками, поэтому нужна только первая стрелка. – Axeman

+1

Или '$$ arr [0] [1] {bar}'. Я лично предпочитаю это над символом '->'. – Dummy00001

+2

Это не должно быть ссылкой на массив, замените первую [с (последним]) и $ aah на @aah. Теперь вы можете получить доступ к следующим данным: $ aah [0] [1] {bar}; не требуется синтаксис отмены ссылки, по причине, указанной Axeman. – MkV

6

Вы можете обратиться элементы такой структуры данных, таким образом:

$x->[1][2]{foo} = "hello" 

Вы не должны даже предварительно определить структуру. Просто начните работать с элементами, как будто они уже есть.

+6

Эта особенность Perl известна как ** autovivification **. –

+0

Хорошо ли это работает с 'use warnings' и' use strict'? – Dummy00001

+0

@ Dummy000001: да. –

0
my $arr = 
    [ 
    [ 
     {key1 => $value1, key2 => $value2}, 
     {key1 => $value3} 
    ], 
    [ 
     {rubbish => 'nonsense'}, 
    ] 
    ]; 

т.д.

+0

Просто потому, что его вложенная структура данных не означает, что она должна быть arrayref, она может быть массивом arrayrefs hashrefs. – MkV

+0

@MkV: Большинство программистов предпочли бы arrayref, так как дешевле и проще обходить структуру данных, чем список. Кстати, вы ответили на этот ответ? Если это так, это довольно хромая причина. –

+0

Конечно, это может быть массив, а не массив в верхней части. И что? Он не меняет ответ каким-либо существенным образом. Я не знаю, почему вы сочли необходимым добавить этот комментарий к ответам моего и jkramer. –

6

perldoc perldsc хороший документ для чтения, чтобы получить представление структур данных в Perl.

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