在散列哈希中获取第n个/最后一个值

时间:2014-01-28 15:33:41

标签: perl hash hashmap hashtable

我试图制作哈希值,以唯一地识别仅在一组级别下的数字。哈希结构看起来像这样:

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;
              }
             }
            }
           }
          }
         }    

这个过程似乎工作正常。但我只是在寻找更简单,更短的东西;

提前致谢

2 个答案:

答案 0 :(得分: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 :(得分: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