获取哈希值的哈希值中的第n个/最后一个值

问题描述 投票:0回答:2

我正在尝试创建哈希值的哈希值来唯一标识仅属于一组级别的数字。哈希结构看起来像这样:

my %gh = {
      'Test1' => {
                   'level1a' => {
                           'level2b' => {
                                   'level3a' => {
                                           'level4a' => {
                                                   'level5' => '63'
                                                 }
                                         }
                                 }
                         }
               }
      };           

遍历哈希值以便获得值 63 的最简单方法是什么?

我一直在使用:

my $x = '';
foreach my $l0 (%gh){
          foreach my $l1 (%{$l0}){
           foreach my $l2 (%$l1){
            foreach my $l3 (%{$l2}){
             foreach my $l4 (%$l3){
              foreach my $l5 (%{$l4}){
               $x = $l5;
              }
             }
            }
           }
          }
         }    

这个过程似乎运行良好,但我只是在寻找更简单、更短的东西。

perl hashmap hashtable
2个回答
2
投票

这适用于您的情况(仅哈希值和末尾的纯标量值)

sub hval {
  my ($h) = @_;
  return map { ref() ? hval($_) : $_ } values %$h;
}

my $gh = {
      'Test1' => {
                   'level1a' => {
                           'level2b' => {
                                   'level3a' => {
                                           'level4a' => {
                                                   'level5' => '63'
                                                 }
                                         }
                                 }
                         }
               }
};     

my ($x) = hval($gh);

1
投票

如果您使用对哈希的引用,则有一种方法:

use warnings;
use strict;

my $gh = {
      'Test1' => {
                   'level1a' => {
                           'level2b' => {
                                   'level3a' => {
                                           'level4a' => {
                                                   'level5' => '63'
                                                 }
                                         }
                                 }
                         }
               }
      };           

print $gh->{Test1}{level1a}{level2b}{level3a}{level4a}{level5}, "\n";

另请参阅:perldoc perldscData::Diver

© www.soinside.com 2019 - 2024. All rights reserved.