【问题标题】:How to access element in array inside hash?如何访问哈希内数组中的元素?
【发布时间】:2017-02-18 04:33:27
【问题描述】:

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

例子:

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;
}

【问题讨论】:

    标签: perl


    【解决方案1】:

    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};
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-01
      • 2021-08-01
      • 2011-12-14
      • 2010-12-20
      • 1970-01-01
      • 2013-10-27
      • 2013-08-09
      • 1970-01-01
      相关资源
      最近更新 更多