2015-11-03 1 views
2

J'ai un hachage de hachages où la première clé est une chaîne et la deuxième clé est un nombre entier. J'essaie d'obtenir la deuxième clé la plus basse dans le hachage des hachages. Voici mon hash.Perl Hash of Hashes, obtenir le plus bas clé numérique

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

Comment puis-je obtenir la clé pour le hachage simpsons le plus bas (minimum)? Dans ce cas, la réponse serait 3. La recherche connexe la plus proche que j'ai pu trouver était un moyen d'obtenir la clé avec la valeur la plus élevée. Mais j'essaie d'obtenir la clé avec la plus petite valeur numérique.

================== EDIT ============ MY TENTATIVE ============= ===

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

Je ne peux pas en boucle à travers les touches de manière séquentielle (1,2,3,4, etc.) et simplement stocker et retourner la touche la plus basse, car la clé (1,2,3,4 , etc.) peut ne pas exister. J'aurais probablement essayé de stocker les clés dans un tableau séparé et obtenir la clé minimale stockée dans ce tableau. C'est ma tentative. C'est en quelque sorte un moyen de le faire. Puisqu'il s'agit d'une ronde, j'aurais ensuite fait plus de googling pour voir s'il y avait un moyen plus simple (un moyen de doublure) de le faire.

+0

Vous trouvé une solution qui retourne la valeur maximale, mais on ne pouvait pas le modifier pour renvoyer la valeur minimale à la place? Pas même essayer de le modifier et afficher le code non-travail dans la question? –

+0

J'ai ajouté mon processus de pensée et tenter de savoir comment j'aurais essayé de le résoudre. – cooldood3490

+2

Je pense qu'il est important d'afficher votre tentative, même si cela ne fonctionne pas (peut-être surtout si cela ne fonctionne pas), car cela montre une tentative de bonne foi pour résoudre votre problème et motive d'autres personnes à vouloir vous aider. –

Répondre

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

Que se passe-t-il lorsque vous avez '$ HoH {simpsons} {10}'? –

+0

Mon mauvais. Je l'ai réparé. – Andrey

+1

'sort' fait plus de travail que' min', mais pour les hachages de taille modérée, la différence n'est probablement pas significative. – cjm