Perl:将数组分配给哈希值?

时间:2014-03-04 19:42:34

标签: arrays perl hash

我试图发起一个有7个NAs作为值的哈希值。

这就是我所拥有的:

values %hash = ("NA") x 7;
print join("\t",values %hash),"\n";

我收到了这个错误:

Can't modify values in scalar assignment at line 22, near "7;"

显然,虽然我可以将数组分配给散列键

,但我无法使用散列值来执行此操作
keys %hash = ["a","b","c","d","e","f","g"];

为什么它适用于键而不是哈希值的值?

2 个答案:

答案 0 :(得分:5)

来自perldoc -f keys

  

用作左值,“keys”允许您增加为给定哈希分配的哈希桶的数量。如果你知道哈希值会变大,这可以让你获得一定的效率。

即。此方法对于设置密钥没有用,只为一定数量的条目分配空间。当使用引用作为数字时,结果可能会非常大,会占用大部分内存 - 不完全推荐。

要使用某些值初始化哈希,您来指定所需的键。但您可以使用切片作为左值:

my %hash;
@hash{1..7} = ("NA") x 7;

注意:左值是一个可以在作业左侧使用的值。

答案 1 :(得分:1)

散列有两个部分,键和值。 e.g:

my %hash = ( a => 1, b => 2, c => 3 );

这里,键是'a','b'和'c'。值为1,2和3。

如果你看看keysvalues做了什么,他们(不出所料)会分别返回哈希的键和值。

它们并不是要设置散列的值或键,而只是为了检索。