Thread Syntax Zugriff Array Index
(23 answers)
Opened by bianca at 2019-08-11 08:23 2019-08-11T22:29:39 FIFOmap (und grep) in leerem Kontext gelten ja auch als etwas anrüchig, weil man sich "nur" der Nebeneffekte bedient. Und weil man's deswegen manchmal falsch macht. So wie ich hier: Einfach die Zuweisung wegzulassen funktioniert so nicht. Peinlich, peinlich. Richtig wäre es beispielsweise so: Ich habe nochmal eine korrigierte Version erstellt, die auch eine einzeilige Version von Biancas Original enthält. ![]() Hier die 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 27 28 29 30 31 32 33 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' and $_->[1]++ } @stats; } sub grepper { (grep {$_->[0] eq 'a3333'} @stats)[0]->[1]++; } timethese (10000, { '1. Array neu erstellen ' => \&rewrite_array, '2. Schleife ausformuliert ' => \&loop, '3. Array im leeren Kontext' => \&void_array, '4. Original einzeilig ' => \&grepper, }); print "a3333 ist nun $stats[3333][1]"; Code: (dl
)
1 1. Array neu erstellen : 13 wallclock secs (13.16 usr + 0.00 sys = 13.16 CPU) @ 759.88/s (n=10000) |