【问题标题】:perl reference hash sliceperl 参考散列片
【发布时间】:2015-04-28 08:00:53
【问题描述】:

我有以下哈希:

my %gilligan_info = (
        name            =>      'Gilligan',
        hat             =>      'white',
        shirt           =>      'Red',
        position        =>      'First Mate',
);

my %skipper_info = (
        name            =>      'Skipper',
        hat             =>      'Black',
        shirt           =>      'Blue',
        position        =>      'Captain'
);

我有一个哈希数组:

my @crew = (\%gilligan_info, \%skipper_info);

我创建了一个参考:

my $ref = \%{$crew[1]};

我正在从第二个哈希中提取键值:

my @ref_values = @{$ref}{ qw ( name position hat )};

我的问题是,如何通过不在参考“$ref”中指定元素编号来获取哈希值?

谢谢

【问题讨论】:

  • 您对上述示例的期望结果是什么?
  • 我想在“@ref_values”中指定所需的元素
  • 那么@ref_values的内容应该是什么?
  • 散列中键的值
  • \%{$crew[1]} 等同于$crew[1]

标签: perl reference


【解决方案1】:

如果你想要单个数组中所有哈希的值,

my @ref_values = map @$_{ qw(name position hat) }, @crew;

【讨论】:

    【解决方案2】:

    我认为您希望 @ref_values 包含每个 @crew 的值数组。

    可能是这样的

    my @ref_values;
    
    for my $crew ( @crew ) {
      push @ref_values, [ @$crew{ qw(name position hat) } ];
    }
    

    如果您愿意,也可以使用map,类似于Сухой27 的解决方案

    【讨论】:

    • 谢谢。有没有艾米的方式我可以使用“$ref”引用而不是直接使用“@crew”?
    • @SamPinar:是的,但是在您自己的代码中,$ref 只是@crew 的第二个元素的副本,因此您将无法通过它访问第一个元素。我在想也许你需要向我们展示真正的问题才能得到正确的答案
    • 我要做的就是使用 $ref = \%{$crew} (不指向特定元素)并在 $ref_values 中写入指向我想要的元素的语法
    • @SamPinar:正如我所指出的,$ref = \%{$crew}$ref = $crew 相同,而且您没有$crew 变量。如果您选择$ref = \@crew,那么您可以将我的解决方案中的@crew 替换为@$ref
    • 谢谢,我会试一试
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    • 2013-03-14
    • 2019-01-13
    • 1970-01-01
    • 1970-01-01
    • 2013-02-24
    • 2012-08-03
    相关资源
    最近更新 更多