Thread Bei "for" durch einen Array delete auf sich selbst anwenden
(5 answers)
Opened by Gast at 2008-10-20 13:25
Verdammte Neugier:
Bei Verwendung eines Vergleichs ist die grep Suche etwas schneller. quick'n'dirty benchmarked: Code: (dl
)
1 @list has 17576 elements! Used this dirt: 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 34 35 36 37 38 39 40 41 42 43 44 45 #!/usr/bin/perl use strict; use warnings; use Benchmark qw( cmpthese ); my @list = ( ( 'AAA' .. 'ZZZ' ) x 1 ); my $pattern = 'WVX'; print "\@list has " . @list . " elements!\n"; cmpthese( -2, { 'grep_eq' => \&grepped_eq, 'splice_eq' => \&spliced_eq, 'grep_re' => \&grepped_re, 'splice_re' => \&spliced_re, } ); sub grepped_eq { my @aa = @list; @aa = grep { $_ eq $pattern } @aa; } sub spliced_eq { my @aa = @list; for my $i ( reverse 0 .. $#aa ) { splice @aa, $i, 1 if $aa[$i] eq $pattern; } } sub grepped_re { my @aa = @list; @aa = grep { m/\Q$pattern\E/ } @aa; } sub spliced_re { my @aa = @list; for my $i ( reverse 0 .. $#aa ) { splice @aa, $i, 1 if $aa[$i] =~ m/\Q$pattern\E/; } } __END__ meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen! |