如何在哈希中访问数组中的元素?

时间:2017-02-18 04:33:27

标签: perl

我正在解析文本文件并将单词作为键存储在哈希中。每个键都有一个数组作为其值,并存储该单词在文本中出现的次数作为第一个值以及该单词作为数组中第二个值的概率。

示例:

my %ngram = (
    "word"=>("how many this word appear in text"," probability of this word")
);

如何在哈希中访问或检索数组的值?我发布了我用来完成的代码;我试图打印出这些值,但它打印为零,如下所示:

0 *** 0 
0 *** 0

我是如何检索或访问这些值的?

while ( scalar @words > $inputs[0])
{
    $numerator="@words[0 .. $inputs[0]]";
    $denominator= "@words[0 .. ($inputs[0]-1)]";
    $nGram{$numerator}[0]=$nGram{$numerator}->[0]++;
    $nGram{$denominator}++;
    my $freq=$nGram{$numerator}->[0]/$nGram{$denominator};
    $nGram{$numerator}[1]=$freq;
    print "$nGram{$numerator}->[0] *** $nGram{$numerator}->[1]";
    shift @words;
}

1 个答案:

答案 0 :(得分:2)

Perl中的多级数据结构(如数组哈希)不存储数组本身。它将引用存储到数组中。

my %ngrams = (
    $word => [$num, $probability]
);

请注意[]而不是()。这是一个数组引用。现在你可以像其他任何东西一样获得价值。

my $value = $ngrams{$word};

$value是一个数组引用。你必须取消引用才能使用它。

my $probability = $value->[1];

您也可以一次性完成此操作。

my $probability = $ngrams{$word}[1];

您可以在Perl Reference Tutorial

中详细了解相关信息

但更好的数据结构将是哈希的散列。

my %ngrams = (
    $word => {
        appearances => $num,
        probability => $probability,
    }
);

现在不必记住元素0是出现次数,而元素1是概率,你可以按名称引用它们。

my $probability = $ngram{$word}{probability};