哈希表和foreach语句



我对perl哈希表有点困惑。

我知道你可以通过调用

创建一个散列:
my %hashTable;
$hashTable("Key") = "Value"
之后,如果您想检索值,您可以执行
print $hashTable("Key")

然而,我对这个for循环感到困惑

foreach (keys %{$hashTable{"key"}})
{
    print $_
}

没有%{$hashTable{"key"}},看起来它将打印出每个键,但是如果您在哈希表前执行%会发生什么?

我试着测试这个函数,通过给它一个名为"key"的键,它会给我一个错误:不能使用字符串("key")作为哈希引用。这和多维哈希表有关吗?

你有一个散列,叫做%hashTable。它有一个键为key的值,该值有另一个哈希表

所以代码:

foreach (keys %{$hashTable{"key"}})
{
    print $_
}

循环遍历第二个散列,并打印出它包含的键。

下面是一个使用Miller提供的文档链接的例子:

#!/usr/bin/perl
use strict;
use warnings;
my %HoH = (
    flintstones => {
        lead => "fred",
        pal => "barney",
    },
    jetsons => {
        lead => "george",
        wife => "jane",
        "his boy" => "elroy",
    },
    simpsons => {
        lead => "homer",
        wife => "marge",
        kid => "bart",
    },
);
foreach (keys %{$HoH{"flintstones"}})
{
    print $_."n";
}

输出:

lead
pal

想象您的hashTable

key1:           <-+
    value1        |
key2:             |
    value2        += this is your hashTable, with 3x key/value
key3:             |
    value3      <-+

现在更改keyN的值-因此,它将不包含标量值,而是包含另一个散列,如:

key1:
    subkey1a: subval1a      <-+ this "HASH" is the value for the "key1".
    subkey1b: subval1b      <-|
key2:
    subkey2a: subval2a
key3:
    subkey3a: subval3a
    subkey3b: subval3b
    subkey3c: subval3c

最新更新