2015-11-03 24 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