дело было вечером, делать было нечего,
было скучно..вспомнил бородатый анекдот дневник джигита (абрека),
захотел вернуться к этому и выяснить, что быстрее работает,
потому как map тоже является циклом, только хитрозаточенным,
в отличии от for (foreach) и, думаю, не очень его быстрее
и чтобы хейтеры (не путать с хипстерами) не начали своё любимое
"пруф или трепло", решил - хайпанём, немножечко? ))
вот proof, сиречь доказательство
#!/usr/bin/perluse strict;
use warnings;
use JSON;
use Data::Dumper;
use Benchmark 'cmpthese';
my $json_text = '[
{
"id" : "1",
"name" : "Name1"
},
{
"id" : "2",
"name" : "Name2"
},
{
"id" : "3",
"name" : "Name3"
}]'
;
#my $json = JSON->new->decode($json_text);
my $json = decode_json($json_text);
print Dumper($json);
sub mapng {
my @names = map { $_->{name} } @{$json};
}
sub modif {
push my @names, $_->{name} for @{$json};
}
sub cycle {
for ( @{$json} ) {
push my @names, $_->{name};
}
}
cmpthese(
-1,
{
'mapng' => sub { mapng($json) },
'modif' => sub { modif($json) },
'cycle' => sub { cycle($json) },
}
);
__END__
что видим?
что так и да, mapping быстрее, но не в разы
# ./test.pl
$VAR1 = [
{
'name' => 'Name1',
'id' => '1'
},
{
'name' => 'Name2',
'id' => '2'
},
{
'name' => 'Name3',
'id' => '3'
}
];
Rate mapng cycle modif
mapng 239064/s -- -8% -9%
cycle 260979/s 9% -- -1%
modif 262926/s 10% 1% --
выигрыш по скорости небольшой, всего лишь код немного короче (красивее? ;) ),
(думаю, что map выгоден для обработки и трансформации массива в другой массив)
такие дела
блин, опять скучно..