【问题标题】:Parsing a HoAoHoAoHoAoH in Perl在 Perl 中解析 HoAoHoAoHoAoH
【发布时间】:2015-04-02 11:09:43
【问题描述】:

我是 Perl 新手,对哈希有一点了解。我有一个哈希数组的哈希数组哈希数组的哈希(HoAoHoAoHoAoH),如下所示。

%my_hash = (
    key00 => 'value00',
    key01 => [
        {  key10 => 'value10',
           key11 => 'value11',
           key12 => [
               {   key20  => 'value20',
                   key21  => 'value21',
                   key22  => [
                       {   key30  => 'value30',
                           key31    => [
                               { color => 'blue',  quantity => 10, boxes => [0,1,3] },
                               { color => 'red',   quantity => 2,  boxes => [2,3]   },
                               { color => 'green', quantity => 5,  boxes => [0]     },
                           ],
                       },
                   ],
               },
           ]
        }
    ]
);

访问“颜色”、“数量”和“框”的最简单方法是什么?我还需要对“数量”进行算术运算,例如 10+2+5 (quantity0+quantity1+quantity2)。

【问题讨论】:

  • 当您开始使用这种高度嵌套的数据结构时,您应该考虑改用对象。看看官方的 Perl 面向对象编程教程,perlootut

标签: arrays perl hash hash-of-hashes


【解决方案1】:

这看起来很像 XY 问题。你想在这里解决什么?

您可以像这样访问数据结构的元素:

print $my_hash{key01}[0]{key12}[0]{key22}[0]{key31}[0]{color},"\n";

您还可以使用以下方法迭代底部元素:

foreach my $something ( @{ $my_hash{key01}[0]{key12}[0]{key22}[0]{key31} } ) {
   print $something->{'color'};
   print $something->{'quantity'}
}

但这看起来不像是一个真正的问题 - 你实际上想要完成什么?我可能猜想您正在尝试解析 XML 或类似的东西,在这种情况下,几乎可以肯定有更好的方法。

【讨论】:

  • 谢谢,这是给我的“配置”文件,我需要解析它以获取最内层数组中的元素。
  • 这是你的配置文件的格式吗?因为那是一场火车事故,你真的应该试着劝阻人们不要做那种肮脏的事情。
  • 不幸的是,是的。它甚至不在我的手中。 :(
猜你喜欢
  • 1970-01-01
  • 2013-07-17
  • 2010-12-05
  • 2013-07-08
  • 2013-12-11
  • 2015-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多