« ハッシュに要素が存在するか調べる | メイン | ハッシュのキーでソート(並べ替え)する »

カテゴリー:ハッシュ(連想配列) 

ハッシュを全て出力する

このエントリーを含むはてなブックマーク  livedoorクリップ  ハッシュを全て出力するをdel.icio.usに追加  ハッシュを全て出力するをYahoo!ブックマークに追加  ハッシュを全て出力するをニフティクリップに追加

ハッシュの内容を全て出力するには、いくつかの方法がある。

まずはもっともシンプルな方法。だが、もっとも使用しないだろう方法。ハッシュのキーと値がずらずら~とただ表示される

print %ENV;

■while, each構文

while( ($name, $value) = each %ENV ){
	print "$name,$value\n"
}

■foreach, keys構文

foreach my $name ( keys %ENV ){
	print "$name,$ENV{$name}\n";
}


■map, keys構文

map{ print "$_,$hash{$_}\n" } keys %ENV;




上記3つはいずれも「キー,値 <改行>」の組み合わせで全要素が表示される。なお、どれを使うかは状況次第。また個人の趣味である。念のため以下のようにベンチマークを取ってみた。while遅いですね。mapとforeachは良い勝負です。

Benchmark: timing 100000 iterations of FOREACH, MAP, WHILE...
   FOREACH:  7 wallclock secs ( 7.64 usr +  0.00 sys =  7.64 CPU) @ 13087.29/s (n=100000)
       MAP:  7 wallclock secs ( 6.68 usr +  0.00 sys =  6.68 CPU) @ 14970.06/s (n=100000)
     WHILE: 10 wallclock secs ( 9.88 usr +  0.01 sys =  9.89 CPU) @ 10107.14/s (n=100000)


use Benchmark;

#-------------------------------------#
#ベンチマーク
#-------------------------------------#
timethese(
    100000,
    {
          'WHILE'   => 'while1();'
        , 'FOREACH' => 'foreach1();'
        , 'MAP'     => 'map1();'
    }
);


sub while1{
    my $str = '';

    while( my($name, $value) = each %ENV ){
        $str = "$name,$value";
    }
}


sub foreach1{
    my $str = '';

    foreach my $name ( keys %ENV ){
        $str = "$name,$ENV{$name}";
    }
}


sub map1{
    my $str = '';

    map{ $str = "$_,$hash{$_}" } keys %ENV;
}



トラックバック

このエントリーのトラックバックURL:
http://katsubemakito.net/mt/mt-tb.cgi/600






クリエイティブ・コモンズ・ライセンス
このブログは、次のライセンスで保護されています。 クリエイティブ・コモンズ・ライセンス.