0

配列のハッシュがあります。それをループする最も効率的で最速の方法です。

my %h1 = (
  C1 => ['3','1','2'],
  C2 => ['6','2','4'],
  C3 => ['8', '1'],
 );

オプション1

foreach my $key ( keys %HoA )  {
    print "Articles in group $key are: ";
    foreach ( @{$HoA{$key}} )  {
    print "$_\n";
    }
}

オプション 2

while( my ($k, $v) = each %HoA ) {
    print "Articles in group $k are: @$v\n";   
}

巨大な HoA をループする場合、どれが時間を節約できるでしょうか。

4

2 に答える 2

2

すべてのハッシュ キーの完全なリストを事前に作成すると理解していkeysますが、これにより、大きなハッシュにかなりの量のメモリが使用される可能性があります。巨大な HoA を持っているとおっしゃっているので、これは 1 つの考慮事項だと思います。

私にとっての主な違いのいくつかは、値または配列要素の数でソートされたリストが必要な場合があり、返されるキーと値のペアの順序を制御できないと思うことですeach。したがって、ソートされたリストが必要な状況では、 を使用しますkeys。ハッシュが非常に大きく、キーと値の両方が必要であるが順序は重要ではない場合each、2 つの要素 (キーと値のペア) のリストのみを返すため、使用します。他の人が示唆しているように、考慮すべきもう1つのことはデータベースの使用ですが、データのサイズによってはコストがかかる場合があります.

keys「より速いですeachか?」という質問に答えるのは難しいと思います。データについて詳しく知ることなく(そして直接テストすることなく)、「この状況で使用すべきkeysか、または使用すべきか」という質問に答えた方が簡単かもしれません。each目標と「巨大な HoA」の意味によっては、少なくともメモリに関しては、1 つの方法がより効率的でパフォーマンスが向上する可能性があると思います。他の人はこの件に関して異なる意見や経験を持っているかもしれませんので、フィードバックをいただければ幸いです.

于 2013-04-04T15:46:06.663 に答える