Thread Syntax Zugriff Array Index
(23 answers)
Opened by bianca at 2019-08-11 08:23 2019-08-11T12:59:55 FIFO Ich bin mal neugierig geworden und habe das vermessen. Die ausformulierte Liste ist tatsächlich die schnellste Möglichkeit. Sie gibt außerdem die Möglichkeit, die Schleife nach einem Treffer vorzeitig abzubrechen, falls nur ein Element geändert werden soll. Das map läßt sich im vorliegenden Fall allerdings auch beschleunigen, wenn man die Liste nicht neu aufbaut. Dann wird einfach das Element in der Original-Liste hochgezählt. Hier der Vergleichscode: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 use strict; use warnings; use Benchmark ('timethese'); my $size = 10000; my @stats = map { [ "a$_" => 0] } (0..$size); sub rewrite_array { @stats = map { $_->[0] eq 'a3333' ? [$_->[0], $_->[1] + 1] : $_ } @stats; } sub loop { for my $item ( @stats ) { $item->[1]++ if $item->[0] eq 'a3333'; } } sub void_array { map { $_->[0] eq 'a3333' ? [$_->[0], $_->[1] + 1] : $_ } @stats; } timethese (10000, { '1. Array neu erstellen ' => \&rewrite_array, '2. Schleife ausformuliert ' => \&loop, '3. Array im leeren Kontext' => \&void_array, }); und das Resultat: Code: (dl
)
1 Benchmark: timing 10000 iterations of Der Aufbau eines Hash ist nochmal erheblich langsamer, für einen einzigen Zugriff lohnt sich das nicht. |