Kurt: Arrays mit "grep" filtern

Beitrag lesen

Hi

Ergibt dann einen Geschwindigkeitsvorteil von ca. 2,5 zugunsten des Slices.

chic..echt chic! Endlich mal eine parktische Übung mit hashslices (und wahrscheinlich der Hauptanwendungsfall :)

Die Beschleunigung ist sogar höher als du denkst, weil Benchmark die prozentuale Differenz anzeigt, also +770%  heißt 8,7 mal schneller.

hab auch mal die Variante ausprobiert, wo alle excludes in einer großen RegEx drin sind, die war nur noch halb so schnell wie der Array slice.

'regex_grep'  =>  sub { my @wanted = (6..10);
                           my $regex=join("|",@wanted);
                           @array1 = grep { ! /^($regex)$/ }                @array1;
                            },

Allerdings wenn mans viele Arrays filtern möchte, könnte man die RegEx vorkompilieren lassen...

Ne andere Variante ohne grep direkt mit Hashslice hätte den Nachteil dass identische Arrayinhalte wegfielen...

@exclude=(6..10);
 @array1=(1..10);
 @array2=(10,5,5,10);

$,="\t";$="\n";

@hash1{@array1}=();
@hash2{@array2}=();
print keys %hash1;
print keys %hash2;

delete @hash1{@exclude};
delete @hash2{@exclude};

print keys %hash1;
print keys %hash2; # hier kommt nur 5 raus

Aber den Sigil @ bei den Hashslices kann ich mir gerade nicht intuitiv erklären oder leicht merken... hm oder doch muss mal recherchieren...

Bye
 Kurt