动态创建一个数组的关联数组

3
我正在尝试动态创建一个值为数组的关联数组。我的当前尝试如下,但我不确定它是否正确或有效。
foreach $line (@lines)                               # read line from a text dictionary 
{
    chomp( $line );
    my($word, $definition) = split(/\s/, $line, 2); # 
    $definition =~ s/^\s+|\s+$//g ;                 # trim leading and trailing whitespace

    if( exists $dict{$word} )
    {
        @array = $dict{$word};
        $len = scalar @array;
        $dict{$word}[$len] = $definition;
    }
    else
    {
        $dict{$word}[0] = $definition;
    }
}

2
你可以用 push @$dict{$word}, $definition 来替换整个 if/else 语句。目前你只是为了计算数组长度而复制了一遍数组。 - Nemo
我收到了错误信息 Not an ARRAY reference - Olumide
这是因为$dict{$word}最初没有值,因此尝试将其转换为数组是行不通的,因为它不是数组引用。 - xaxxon
1个回答

2

我很确定这个可以工作(现在无法测试)

foreach $line (@lines)                               # read line from a text dictionary 
{
    chomp( $line );
    my($word, $definition) = split(/\s/, $line, 2); # 
    $definition =~ s/^\s+|\s+$//g ;                 # trim leading and trailing whitespace

    push @{$dict{$word}}, $definition;

}

(使用unshift而不是push将把新条目放在其他条目的另一侧)

由于自动创建,可能可以省略||= [] - Slaven Rezic
看起来你是对的。正在更新答案。我喜欢在转换周围加上花括号,因为这使得它非常清晰明了。 - xaxxon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接