Perlに関するmochitabesugiのブックマーク (1)

  • each()は遅い上に微妙な問題も起きやすい - Islands in the byte stream (legacy)

    特別な条件がないかぎり、each()は使うべきではありません。代わりにkeys()/values()を使うべきです。その理由は2つあります。 each()は遅い each()でハッシュ全体をループするのは遅いです。これは、keys()/values()がその内部の値をそのまま参照する*1のに対し、each()は代入しないとその値を使えないからです。 ベンチマーク: #!perl use strict; use warnings; use Benchmark qw(cmpthese); my %hash = map { $_ => $_ } ( 1 .. 10000 ); cmpthese -1, { each_k => sub { while(my $key = each %hash) { } }, each_kv => sub { while(my($key, $value) = eac

    each()は遅い上に微妙な問題も起きやすい - Islands in the byte stream (legacy)
    mochitabesugi
    mochitabesugi 2011/06/04
    普通keyかvalueのどちらかしか必要ないときは、eachは使わない。githubの方のベンチマークでハッシュキーの数を1桁増やしたら、eachの方が早くなった。keysでは大きな配列を確保する分遅くなる。
  • 1