2

最初のキーが文字列で、2 番目のキーが整数であるハッシュのハッシュがあります。ハッシュのハッシュで最も低い 2 番目のキーを取得しようとしています。これが私のハッシュです。

%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。私が見つけた最も近い関連検索は、最高値のキーを取得する方法でした。しかし、数値が最も低いキーを取得しようとしています。

================== 編集 ============ 私の試み ================

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など)、最も低いキーを格納して返すことはできません。おそらく、キーを別の配列に格納し、その配列に格納されている最小のキーを取得しようとしたでしょう。それが私の試みです。それは一種のラウンドアバウトな方法です。それは回り道なので、次にもっと簡単な方法(ワンライナーの方法)があるかどうかを確認するために、さらにグーグルを実行したでしょう。

4

2 に答える 2

8
use List::Util qw(min);
print min(keys(%{$HoH{simpsons}}));
于 2015-11-03T18:20:12.973 に答える
3
my $min = (sort {$a <=> $b} keys $HoH{'simpsons'})[0];
print $min;
于 2015-11-03T18:35:55.313 に答える