2015-11-03 81 views
2

我有散列哈希其中第一个键是一个字符串,第二个键是一个整数。我试图获得哈希散列中最低的第二个密钥。这是我的哈希。Perl散列哈希,得到最低的数字键

%HoH = (
    flintstones => { 
     8 => "fred", 
     4 => "barney", 
    }, 
    jetsons => { 
     5 => "george", 
     1 => "jane", 
     9 => "elroy", # Key quotes needed. 
    }, 
    simpsons => { 
     99 => "homer", 
     5 => "marge", 
     3 => "bart", 
    }, 
); 

如何获得散列simpsons的最低(最小)键?在这种情况下,答案将是3。我能找到的最接近的相关搜索是获得最高价值的关键。但是我试图用最低的数字值得到密钥。

==================编辑============ MY ATTEMPT ============= ===

foreach my $cartoon (keys %HoH){ 
    if ($cartoon == "simpsons"){ 
     $HoH{$cartoon}{<numeric key>}; # somehow store and print lowest key 
    } 
} 

我可以通过键不循环顺序(1,2,3,4等),并简单地存储并返回最低键,因为键(1,2,3,4等)可能不存在。我可能会尝试将密钥存储在单独的数组中,并获取存储在该数组中的最小密钥。这是我的尝试。这是关于如何做的一种方式。由于这是一个围绕方式,接下来我会做更多的谷歌搜索,看看是否有一个更简单的方法(一种班轮方式)来做到这一点。

+0

您发现返回的最大值的解决方案,但你不能修改它返回最小值呢?甚至不尝试修改它并在问题中发布非工作代码? –

+0

我加入了我的思考过程,并尝试着如何尝试解决它。 – cooldood3490

+2

我认为发布你的尝试是重要的,即使它不起作用(也许_especially_如果它不起作用),因为它表明了一个善意的尝试来解决你自己的问题,并激励其他人想要帮助你。 –

回答

7
use List::Util qw(min); 
print min(keys(%{$HoH{simpsons}})); 
3
my $min = (sort {$a <=> $b} keys $HoH{'simpsons'})[0]; 
print $min; 
+0

当你有'$ HoH {辛普森} {10}'时会发生什么? –

+0

我的不好。修复。 – Andrey

+1

'sort'比'min'更有效,但对于中等大小的哈希,差异可能并不显着。 – cjm