【问题标题】:How can I push an element into an array reference held as a hash value?如何将元素推送到作为哈希值保存的数组引用中?
【发布时间】:2017-04-21 23:42:27
【问题描述】:
%data = (
    'digits' => [1, 2, 3],
    'letters' => ['a', 'b', 'c']
);

我怎样才能将push '4' 变成$data{'digits'}

我是 Perl 的新手。那些$@% 符号对我来说看起来很奇怪;我来自 PHP 背景。

【问题讨论】:

标签: perl


【解决方案1】:
push @{ $data{'digits'} }, 4;

$data{'digits'} 返回一个数组引用。将 @{} 放在它周围以“取消引用它”。同样,%{} 将取消引用哈希引用,而 ${} 将取消引用标量引用。

如果您需要将某些内容放入哈希引用中,即

$hashref = { "foo" => "bar" }

你可以使用:

${ $hashref }{ "foo2" } = "bar2"

或箭头符号:

$hashref->{"foo2"} = "bar2"

以某种方式,将引用视为与变量名称相同的东西:

push @{ $arrayref   }, 4
push @{ "arrayname" }, 4
push    @arrayname   , 4

事实上,这就是“软引用”。如果您没有打开所有严格性,您可以直接:

# perl -de 0
  DB<1> @a=(1,2,3)
  DB<2> $name="a"
  DB<3> push @{$name}, 4
  DB<4> p @a
1234

【讨论】:

  • 非硬引用是符号引用。
【解决方案2】:
push @{data{'digits'}}, 4;

@{} 从引用创建一个数组(data{'digits'} 返回一个数组引用。)然后我们使用我们得到的数组将值 4 推入哈希中的数组。

这个link 有助于解释一下。

我使用这个link 来解决有关 Perl 中的哈希的任何问题。

【讨论】:

    【解决方案3】:

    对于一个异国情调但非常令人赏心悦目的选项,请查看autobox::Core CPAN 模块。

    use autobox::Core;
    
    my %data = (
        digits  => [1, 2, 3],
        letters => ['a', 'b', 'c'],
    );
    
    $data{digits}->push(4);
    
    $data{digits}->say;   # => 1 2 3 4
    

    【讨论】:

      【解决方案4】:
      push @{ $data{digits} }, 4;
      

      Perl 官方文档网站上有一个很好的数据结构教程:perldsc,尤其是Hashes-of-Arrays 部分。

      $、@ 和 % 被称为印记。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-02
        • 2012-05-30
        • 1970-01-01
        • 1970-01-01
        • 2016-05-16
        • 2022-01-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多