【问题标题】:Accessing hash values(arrays) in Perl在 Perl 中访问哈希值(数组)
【发布时间】:2013-12-19 17:33:42
【问题描述】:

我确定我遗漏了一些东西,我已经完成了将数组作为值存储到我的哈希值,但是我正在打印的是一个 数组引用,而不是元素,尽管我正在循环通过这。我得到的只是 ARRAY(0x1c....)

这是我到目前为止所做的:

foreach $y ($hash{$first_char}){
    print $y;
}

缺少什么?

编辑this 可能是重复的,但并不具体。

回答:缺少@{}

foreach $y (@{$hash{$first_char}}){
        print $y;
    }

【问题讨论】:

  • 可能是foreach $y (@{$hash{$first_char}}){
  • 请正确缩进。您需要向我们展示您是如何填充 %hash(和 @splitted)的。有一个示例输入和您的期望会非常有帮助。

标签: arrays perl hash


【解决方案1】:

我猜你的%hash 是数组引用的哈希值。 (显示输出:

use Data::Dumper;
$Data::Dumper::Useqq = 1;
print Dumper \%hash;

将有助于澄清您的问题。)

如果是这样,并且您正尝试遍历其中一个数组中的元素,您希望:

for my $y ( @{ $hash{$first_char} } ) {

使用use strict; use warnings; 并使用词法变量(用my 声明并限制在最短的实际范围内)也是一个非常好的主意。

【讨论】:

  • 好吧,现在我知道了,如果我要求用户输入任何字母作为键并打印目标数组,我会得到一个完全不同的数组。例如,将“h”传递给键,数组对应以“s”开头的单词。
  • 我怀疑您将相同的数组推送到每个字母的哈希值;正确使用词法变量可以解决这个问题。
  • 实际上没有,我正在将前一个键的数组推送到当前键。还有一个问题,这些数组中的元素(单词),似乎我无法将它们与字符串进行比较……知道为什么吗?
【解决方案2】:

如果%hash 中元素的值是数组,那么它们必须是数组引用(例如标量值(因为哈希值只能是标量值))。

因此,如果您希望循环存储数组中的每个值,您需要通过将 foreach 循环 (INNERLOOP) 的对象更改为 (@{$hash{$first_char}}) 来取消引用数组引用。

请注意,我将您的语句包装在 @{} 构造中以获取底层数组。

【讨论】:

    猜你喜欢
    • 2016-12-12
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 2013-06-06
    • 2013-08-21
    • 2013-03-08
    • 2014-06-18
    • 2013-03-22
    相关资源
    最近更新 更多