当前位置: 首页 > 知识库问答 >
问题:

Perl访问散列/散列引用数据结构中的元素

孙阳旭
2023-03-14

我有一个问题,我希望你能帮忙,因为我是哈希和哈希引用的东西的新手?

我有以下数据结构

$VAR1 = {
    'http://www.superuser.com/' => {
        'difference' => {
            'http://www.superuser.com/questions' => '10735',
            'http://www.superuser.com/faq' => '13095'
        },
        'equal' => {
            'http://www.superuser.com/ ' => '20892'
        }
    },
    'http://www.stackoverflow.com/' => {
        'difference' => {
            'http://www.stackoverflow.com/faq' => '13015',
            'http://www.stackoverflow.com/questions' => '10506'
        },
        'equal' => {
            'http://www.stackoverflow.com/ ' => '33362'
        }
    }

如果我想访问关键“差异”中的所有URL,以便我可以对URL执行一些其他操作,那么访问这些元素的正确或首选方法是什么?

例如,我将以下面的URL结束,然后我可以在< code>foreach循环中对这些URL执行操作:

http://www.superuser.com/questions
http://www.superuser.com/faq
http://www.stackoverflow.com/faq
http://www.stackoverflow.com/questions

-编辑-

用于访问上面所示数据结构中进一步向下的元素的代码:

my @urls;
foreach my $key1 ( keys( %{$VAR1} ) ) {
    print( "$key1\n" );
    foreach my $key2 ( keys( %{$VAR1->{$key1}} ) ) {
        print( "\t$key2\n" );
    foreach my $key3 ( keys( %{$VAR1->{$key1}{$key2}} ) ) {
        print( "\t\t$key3\n" );
    push @urls, keys %{$VAR1->{$key1}{$key2}{$key3}};
    }
  }
}
print "@urls\n";

使用上面的代码,为什么会出现以下错误?

不能使用字符串("13238")作为HASH参考,而“严格参考”正在使用……

共有1个答案

董高朗
2023-03-14

这并不难,只需将第二级键从变量中的每个键上去掉:

my @urls;
for my $key (keys %$VAR1) {
    push @urls, keys %{$VAR1->{$key}{'difference'}};
}

如果您正在努力进行解引用,请记住,散列或数组中的所有值都只能是标量值。在多级散列或数组中,各级只是堆叠在彼此顶部的单个散列/数组

例如,您可以执行以下操作:

for my $value (values %$VAR1) {
    push @urls, keys %{$value->{'difference'}};
}

for my $name (keys %$VAR1) {
    my $site = $VAR1->{$name};
    push @urls, keys %{$site->{'difference'}};
}

…直接通过值(对哈希的引用)或通过临时变量进行路由,通过键表示值。perldoc perldata中有更多内容要阅读。

 类似资料:
  • 本文向大家介绍数据结构中的LCFS散列,包括了数据结构中的LCFS散列的使用技巧和注意事项,需要的朋友参考一下 在本节中,我们将看到什么是LCFS散列。这是一种开放式寻址策略,它改变了冲突解决策略。如果我们检查开放地址方案中的哈希算法,我们会发现如果两个元素冲突,那么优先级更高的元素将被插入表中,随后的元素必须继续前进。因此,我们可以说开放寻址方案中的哈希是FCFS标准。 采用LCFS(后到先服务

  • 假设我有一个哈希数据结构,构造如下: 在这种情况下,如何按值从最大到最小对键进行排序?然后我想打印出最高的两个。这是一个大致的想法,但我知道这是错误的: 我想要打印代码(空格以制表符分隔):

  • 6.1 字典 字典是一种以键- 值对形式存储数据的数据结构,就像电话号码簿里的名字和电话号码一 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>字典sample</title> </head> <body> <script> function Dictionary(){ this.ad

  • 根据关键码值(Key value)直接进行访问的数据结构;它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度;这个映射函数叫做散列函数,存放记录的数组叫做散列表。

  • 散列函数非常有用,几乎出现在所有信息安全应用程序中。 哈希函数是将数字输入值转换为另一个压缩数值的数学函数。 散列函数的输入具有任意长度,但输出始终具有固定长度。 散列函数返回的值称为message digest或简称hash values 。 下图说明了散列函数。 Java提供了一个名为MessageDigest的类,它属于java.security包。 此类支持诸如SHA-1,SHA 256,

  • 考虑 HashSet 作为一个 HashMap,在此处我们只关心键(HashSet<T> 实际上只是一个包围 HashMap<T, ()> 的装包(wrapper))。(原文:Consider a HashSet as a HashMap where we just care about the keys (HashSet<T> is, in actuality, just a wrapper a