在Perl中创建,填充和访问多维数组

时间:2012-09-04 06:28:28

标签: perl multidimensional-array

我有数据结构(如下所示),请您告诉我如何填充以及随时以最简单的形式访问元素。这是最好的实现方式,比如Hash of Hashes或Array of Arrays或其他什么?数组中没有太多元素,唯一的问题是它是一个多级数组

%Array = (

    'Item0' => {
        'Name' => 'Item0_Name',
        'Attribs' => {
            'Attr1' => {
                'Name' => 'Attr1_Name',
                'Num'   => 'Attr1_Num'
            },      
            'Attr2' => {
                'Name' => 'Attr2_Name',
                'Num'   => 'Attr2_Num'
            }       
        }       
    },

    'Item1' => {
        'Name' => 'Item1_Name',
        'Attribs' => {
            'Attr1' => {
                'Name' => 'Attr1_Name',
                'Num'   => 'Attr1_Num'
            },      
            'Attr2' => {
                'Name' => 'Attr2_Name',
                'Num'   => 'Attr2_Num'
            }       
        }       
    }

);

1 个答案:

答案 0 :(得分:2)

官方资源是Perl数据结构手册(perldoc perldsc)。

对于显示的数据,似乎一个hashrefs数组就足够了,因为OP中显示的键只是一个字符串化的索引。同样的评论适用于'Attribs':

my @array = (
              {
                  'Name' => 'Item0_Name',
                  'Attribs' => [
                                  {
                                      'Name' => 'Attr1_Name',
                                      'Num'  => 'Attr1_Num'
                                  },      
                                  {
                                      'Name' => 'Attr2_Name',
                                      'Num'   => 'Attr2_Num'
                                  }       
                               ],
              },
              {
                  'Name' => 'Item1_Name',
                  'Attribs' => [
                                  {
                                      'Name' => 'Attr1_Name',
                                      'Num'  => 'Attr1_Num'
                                  },      
                                  {
                                      'Name' => 'Attr2_Name',
                                      'Num'   => 'Attr2_Num'
                                  }       
                               ],
              },
           );