【问题标题】:Get key from array of hash in Perl从 Perl 中的哈希数组中获取密钥
【发布时间】:2019-10-14 19:59:58
【问题描述】:

我有一个哈希码数组,我试图从 PERL 中的哈希数组中打印密钥。以下是代码

my $list = [];

$list = [
    {
     Test => “Value”
    }
];

my ($get_list_key) = map { $_ } @$list;

print $get_list_key;

我得到的输出为:

HASH(0x10bdfd0)

我希望输出为:

$list = [
     "Test"
];

谁能帮忙。

提前致谢

【问题讨论】:

    标签: arrays perl hash


    【解决方案1】:
    $list = [
        {
         Test => “Value”
        }
    ];
    

    在这里,您将 $list 设置为数组引用。引用的数组只有一个元素,即对哈希的引用。顺便说一句,您使用错误的引号字符来定义 "Value" - 您需要使用直引号。

    my ($get_list_key) = map { $_ } @$list;
    

    您取消对数组引用的引用,以获取可以与map 一起使用的数组。但是,正如我们上面所说,数组中的单个元素是哈希引用。在 map 块中,您只需返回 $_,这将是该哈希引用 - 因此您可以在 $get_list_key 变量中返回单个哈希引用。

    您需要在 map 块中做一些更聪明的事情。您想获取引用哈希的键。为此,您需要做两件事:1/ 取消引用哈希引用和 2/ 使用 keys 函数。

    my ($get_list_key) = map { keys %$_ } @$list;
    

    这将为您提供$get_key_list 变量中的单个键(“测试”)。但这不是你想要的。你想要一个包含所有键的数组的引用。为此,您需要使用匿名数组构造函数 ([ ... ]) 将赋值运算符右侧的整个表达式包围起来。因此,最终,您会得到 Håkon 答案中的代码。

    my ($get_list_key) = [ map { keys %$_ } @$list ];
    

    【讨论】:

      【解决方案2】:

      试试这个:

      use strict;
      use warnings;
      use Data::Dumper;
      
      my $list = [
          {
           Test => "Value"
          }
      ];
      
      my $get_list_key = [ map { keys %$_ } @$list] ;
      print Dumper( $get_list_key );
      

      输出

      $VAR1 = [
                'Test'
              ];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-02-24
        • 2013-04-19
        • 2010-09-08
        • 2016-07-22
        • 1970-01-01
        • 1970-01-01
        • 2011-04-20
        相关资源
        最近更新 更多