【问题标题】:Perl hashref printing keysPerl hashref 打印键
【发布时间】:2012-09-20 14:20:58
【问题描述】:

我有以下 hashref :-

my $hashref = {'a'=>(1,2,3,4),
               'b'=>(5,6,7,8)};

然后我使用以下内容来打印键(即“a”和“b”):-

foreach (keys %$hashref){
   print "\n".$_."\n";
}

这将打印以下输出:-

4

a

7

2

5

尝试使用 Data::Dumper 打印数据结构 hashref 会得到以下输出:-

$VAR1 = {
          '4' => 'b',
          'a' => 1,
          '7' => 8,
          '2' => 3,
          '5' => 6
       };

我的问题是:-

1) 如何打印正确的键,即“a”和“b”。 2)为什么数据结构看起来像上面输出中的那个而不像:-

$VAR1 = {
           'a' => (1,2,3,4),
           'b' => (5,6,7,8)
        };

【问题讨论】:

  • 您使用% 定义一个哈希。$ 用于声明标量类型..
  • 一个被{ .. }包围的匿名hashref 一个标量值。

标签: perl perl-data-structures


【解决方案1】:

您定义的哈希值错误。它解释了这一点:

'a'=>(1,2,3,4),
'b'=>(5,6,7,8)

只是一个包含 10 个元素的列表。 (请记住,也可以使用简单列表声明散列,=> 运算符是可选的。)相反,使用方括号将值转换为 arrayref 文字:

'a'=>[1,2,3,4],
'b'=>[5,6,7,8]

应该调用哪个 Data::Dumper:

$VAR1 = {
   'a' => [1,2,3,4],
   'b' => [5,6,7,8]
};

【讨论】:

  • 我知道,但是它已经被这样编码了,所以我需要找出方法来获取密钥。
  • 这就是我的意思,你 /ARE/ 得到的只是钥匙。这些是关键。哈希声明得到一个包含 10 个元素的列表,它解释为 5 个键和 5 个值。
  • @AAB 你不能从那里得到'a'和'b',因为没有正确定义散列。正确的解决方案是正确定义散列。没有其他解决方案。
猜你喜欢
  • 2012-06-07
  • 2014-01-17
  • 1970-01-01
  • 2011-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-10
  • 2015-01-19
相关资源
最近更新 更多