私はハッシュのPerlハッシュを持っています...約11または12要素の深さです。以下の構造を繰り返さないことを許してください!
一部のレベルには固定ラベル ( など) があり'NAMES'
、'AGES'
これらのレベルへのアクセスはラベルを直接使用できるので問題ありませんが、他の変数をループする必要があるため、ステートメントが非常に長くなります。これは、1 セットのループの半分の例です。
foreach my $person (sort keys %$people) {
foreach my $name (sort keys %{$people->{$person}{'NAMES'}}) {
foreach my $age (sort keys %{$people->{$person}{'NAMES'}{$name}{'AGES'}}) {
. . . # and so on until I get to the push @list,$element; part
これは単なる例ですが、私が持っているものの構造に従います。固定名セクション (大文字の要素) を持たない方が短いかもしれませんが、他の場所で参照するために必要です。
各段階で要素をハッシュとしてキャストして短縮しようとしました。たとえば、2番目の foreach では、さまざまな形式を試しました。
foreach my $name (sort keys %{$person->{'NAMES'}})
しかし、これはうまくいきませんでした。以前に似たようなものを見たことがあるはずなので、セマンティクスが間違っている可能性があります。
ハッシュのハッシュに関するページと、ハッシュとその要素への参照などを調べましたが、うまくいきませんでした。ループの例を見たことがありwhile each
ますが、それらは特に短くも簡単にも実装できるようには見えません。たぶん、これを行うには別の方法があり、要点がわかりません。ループの完全なセットを 1 回書き出しましたが、foreach
あと 6 回ほど繰り返す必要がなければ素晴らしいと思います。
もちろん、「簡単な」方法はないかもしれませんが、すべての助けに感謝します!