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

Perl hash of hash of hash…有没有一种“简单”的方法可以在列表末尾获取元素?

暨鹭洋
2023-03-14

我有一个Perl哈希表...大约11或12个元素深。请原谅我没有重复下面的结构!

有些级别有固定的标签,例如< code >‘NAMES’、< code >‘AGES’或类似的标签,所以访问这些级别是可以的,因为我可以直接使用标签,但是我需要循环访问其他变量,这会导致一些非常长的语句。这是一组循环中一半的示例:

foreach my $person (sort keys %$people) {
        foreach my $name (sort keys %{$people->{$person}{'NAMES'}}) {
            foreach my $age (sort keys %{$people->{$person}{'NAMES'}{$name}{'AGES'}}) {
                . . . # and so on until I get to the push @list,$element; part

这只是一个例子,但它遵循了我的一个例子的结构。没有固定名称部分(大写的元素)可能会更短,但在其他情况下需要它们作为参考。

我尝试将元素转换为哈希,以在每个阶段缩短它,例如,对于第二个foreach,我尝试了各种形式:

foreach my $name (sort keys %{$person->{'NAMES'}})

但这并不起作用。我肯定我以前见过类似的情况,所以语义学可能不正确。

我研究了关于Hash of Hash的页面以及对哈希及其元素的引用等等,但运气不好。我见过的示例,每个循环,但它们似乎并不特别短或更容易实现。也许只是有不同的方法来做到这一点,我没有抓住要点。我已经写了一次完整的foreach循环集,如果我不必再重复六次左右就太好了。

当然,可能没有“简单”的方法,但所有的帮助表示感谢!

共有3个答案

井疏珂
2023-03-14

您可以使用Data::walk,这是一种用于数据结构的File::Find。

岳嘉悦
2023-03-14

你也可以使用每个关键字。这肯定会有所帮助。

while( my ($person, $val1) = each(%$people) ) {
    while( my ($name, $val2) = each(%$val1) ) {
        while( my ($age, $val3) = each(%$val2) ) {
            print $val3->{Somekey};
羊舌子瑜
2023-03-14

< code>$person是关键,为了简化内部循环,您需要为某些内容赋值:

foreach my $person_key (sort keys %$people) {
    my $person = $people->{$person_key};
    my $names  = $person->{NAMES};
    foreach my $name (sort keys %$names) {
 类似资料:
  • 问题内容: 上面显示了以下错误: 因此,我必须这样做: 但是,没有简单的方法可以做到这一点吗? 问题答案: 要删除列表中元素的首次出现,只需使用: 请注意,它不会删除所有出现的元素。为此使用列表理解。

  • 问题内容: 我正在建立一个带有flask的网站,其中用户具有帐户并能够登录。我正在使用flask-principal作为登录部分和角色管理。有没有办法让用户的会话在5分钟或10分钟后过期?我在flask文档或flask-principal文档中找不到该文件。 我想到了一种手动方法,在登录时在服务器端设置一个带有时间标签的变量,并在用户执行下一个操作时,服务器会验证该时间戳记上的时间增量并删除会话。

  • 问题内容: 我的网页上有一个“瘦”列表:例如,一个包含100个项目的列表,每个项目的长度为一个单词。为了减少滚动,我想在页面的两列甚至四列中显示此列表。我该如何使用CSS? 我希望该解决方案具有灵活性,这样,如果列表增加到200个项目,则无需进行很多手动调整即可容纳新列表。 问题答案: ul { -moz-column-count: 4; -moz-column-gap: 20px; -webki

  • 问题内容: 我正在建立一个带有flask的网站,其中用户具有帐户并能够登录。我正在使用flask- principal作为登录部分和角色管理。有没有办法让用户的会话在5分钟或10分钟后过期?我在flask文档或flask- principal文档中找不到该文件。 我想到了一种手动方法,在登录时在服务器端设置一个带有时间标签的变量,并在用户执行下一个操作时,服务器会验证该时间戳记上的时间增量并删除会

  • 问题内容: 我正在研究Java应用程序的一部分,该应用程序将图像作为字节数组,将其读入实例,然后将其传递给第三方库进行处理。 对于单元测试,我想获取一个图像(从磁盘上的文件中获取),并断言它等于代码处理过的同一图像。 我的 预期 是使用从磁盘上的PNG文件读取的。 我的 测试 代码将相同的文件读入A,并将其作为PNG写入字节数组,以提供给被测系统。 当被测系统将字节数组写入新数组时,我想断言这两个

  • 问题内容: 我非常喜欢Visual Studio在完成已编写的代码和所引用的ALSO代码(各种库/程序集)时为您提供注释文档/参数名称的方式。 在完成代码或将方法悬停在方法上时,是否有一种简单的方法可以在Eclipse中获取内联javadoc /参数名称?通过插件?通过某些设置?使用大量的库(就像在Java中经常发生的那样)然后当您将其放在源jar中时,必须去网站或本地javadoc位置查找信息,