1

我在项目中使用的 perl 脚本中看到了一段非常奇怪的代码,类似于:

my $arrayRef = [
    A => {AA => 11, AAA => 111},
    B => {BB => 11, BBB => 111},
];

IMO,它尝试从哈希表构造一个匿名数组。我尝试打印数组元素,这是我得到的:

foreach (@$arrayRef )
{
    print;
    print "\n";
}

A
HASH(0x1e60220)
B
HASH(0x1e71bd0)

这意味着它将哈希表中的每个元素(键和值)视为匿名数组中的单独元素。但是我真的很困惑他们为什么要将哈希保存到数组中。如果哈希表真的很大,对我来说唯一的好处是节省一些内存。这是一个广泛使用的 perl 技巧吗?

谢谢!

4

2 回答 2

4

它尝试从哈希表构造一个匿名数组。

不,它从一个四元素列表构造一个匿名数组。

A => {AA => 11, AAA => 111}, B => {BB => 11, BBB => 111}

'A', {AA => 11, AAA => 111}, 'B', {BB => 11, BBB => 111}

的使用=>确实暗示了某种关系,所以我想他们可以使用

{ A => {AA => 11, AAA => 111}, B => {BB => 11, BBB => 111} }

或者

[ [ A => {AA => 11, AAA => 111} ], [ B => {BB => 11, BBB => 111} ] ]

或一百万种其他数据结构中的任何一种,但是有办法知道为什么从您提供的数据中选择一个而不是另一个。

于 2013-06-21T06:44:17.890 回答
2

它是一个匿名数组,其中将字符串键与匿名哈希交替。您的问题的答案:这取决于上下文,具体的数据结构应该有助于解决具体问题。因此,如果我们只有数据结构而忘记了我们试图解决的问题,就很难想象他们为什么使用这种结构。

也许,他们需要一个“有序的哈希哈希”,数组结构确保顺序,而不是哈希

于 2013-06-21T06:50:35.377 回答