【问题标题】:Perl: assign array to hash values?Perl:将数组分配给哈希值?
【发布时间】:2014-03-05 03:56:42
【问题描述】:

我试图启动一个有 7 个 NA 作为值的哈希。

这就是我所拥有的:

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"];

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

【问题讨论】:

  • 所以最大的问题是:为什么你想要一个包含 7 个 NA 的哈希?
  • @LenJaffe:OP 想要一个包含 7 个值的散列。
  • 是的。我看见了。但为什么是哈希? OP 使用列表分配创建了一个哈希。我正在尝试更深入地了解 OP 实际想要完成的任务。
  • 我需要稍后处理哈希...以使用哈希中的键
  • 我通过这篇文章的答案解决了这个问题:stackoverflow.com/questions/3556052/…

标签: arrays perl hash


【解决方案1】:

来自perldoc -f keys

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

即此方法对设置键没有用处,只能为一定数量的条目分配空间。当使用参考作为数字时,结果可能会非常大,会占用你大部分的记忆——不完全推荐。

要使用一些值初始化散列,您必须指定所需的键。但是您可以使用 slice 作为左值:

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

注意:左值是可以在赋值左侧使用的值。

【讨论】:

    【解决方案2】:

    哈希有两部分,键和值。例如:

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

    这里的键是“a”、“b”和“c”。值为 1、2 和 3。

    如果您查看 keysvalues 所做的事情,它们(不出所料)分别返回哈希的键和值。

    它们不是用来设置散列的值或键,只是为了检索。


    【讨论】:

      猜你喜欢
      • 2011-07-20
      • 1970-01-01
      • 1970-01-01
      • 2011-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-09
      相关资源
      最近更新 更多