http://qs321.pair.com?node_id=694518


in reply to Re^2: Splicing Arrays on pre-defined indices
in thread Splicing Arrays on pre-defined indices

my @exclude = (2,5..8); my @exclude_lkup; $exclude_lkup[$_] = 1 for @exclude; my $line = "1!2!3!4!5!6!7!8!9"; my @arr = split /!/, $line; my @filtered = map $arr[$_], grep !$exclude_lkup[$_], 0..$#arr; print("@filtered\n"); # 1 2 4 5

Replies are listed 'Best First'.
Re^4: Splicing Arrays on pre-defined indices
by harishnuti (Beadle) on Jun 28, 2008 at 15:27 UTC
    This is awesome, this is what iam looking for....Thx a lot.
Re^4: Splicing Arrays on pre-defined indices
by injunjoel (Priest) on Aug 15, 2008 at 23:55 UTC
    Since I just updated my previous suggestion I figured I would Benchmark things...
    Not that it matters but I thought you might be interested.
    Update There was an issue with how I ran the test before. Here are the updated code and results.
    #!/usr/bin/perl -w use strict; use Benchmark; my $count = 500000; my $line = "1!2!3!4!5!6!7!8!9"; my @arr = split /!/, $line; my @exclude = (2,5..8); my @exclude_lkup; $exclude_lkup[$_] = 1 for @exclude; sub ikegami { my @tarr = @arr; my @filtered = map $tarr[$_], grep !$exclude_lkup[$_], 0..$#tarr; } sub injun { my @tarr = @arr; @tarr[@exclude] = (); @tarr = grep $_, @tarr; } timethese ( $count, {'Ikegami' => '&ikegami', 'InjunJoel' => '&injun'} );
    Results in
    Benchmark: timing 500000 iterations of Ikegami, InjunJoel... Ikegami: 16 wallclock secs (15.88 usr + 0.00 sys = 15.88 CPU) @ 314 +94.08/s (n=500000) InjunJoel: 10 wallclock secs ( 11.05 usr + 0.00 sys = 11.05 CPU) @ 4 +5265.25/s (n=500000)
    Though I'm not versed enough in O(n) notation to tell you why...

    -InjunJoel
    "I do not feel obliged to believe that the same God who endowed us with sense, reason and intellect has intended us to forego their use." -Galileo