SPUG: Re: re-size array
michaelrwolf at att.net
michaelrwolf at att.net
Mon Oct 11 16:58:51 CDT 2004
Pedant alert -- I'm an isstructor, too.
Don't get the words confused: splice and slice.
splice -- a built-in function
splice(ARRAY,OFFSET[,LENGTH[,LIST]])
slice -- a concept. An indexing (or lookup) operation on an array (or hash) that returns a list.
@array_slice = @array[index list goes here];
@hash_slice = @hash{key list goes here};
Brian's grep solution:
For example this would work if you just want to remove every other
element:
@array=(1..10);
@array = grep { %i++ % 2 } @array;
Brian's solution used grep to pass every other array element. (Code review note: I'd add a "my $i=0" line before the grep line to be explicit about where $i starts.)
The following alternative uses grep to generate the indices for an array slice.
# As a one-liner.
@new_array = @old_array[ grep { $_ % 2 } 0 .. @old_array - 1 ];
# As a two-liner.
@indices = grep { $_ % 2 } 0 .. @old_array - 1;
@new_array = @old_array[@indices];
TMOWTDI.
There's probably a bit more of a memory issue for my solution. It has to hold the @indices array in memory, then the slice'd list in memory before it gets assigned. For big arrays, this may be an issue. You're probably on the cusp of where I'd benchmark it to see how it worked. Otherwise, I'd be tempted to write the one that's more likely to make sense to me in 2 weeks or 6 months when I come back to maintain the code.
> _____________________________________________________________
> Seattle Perl Users Group Mailing List
> POST TO: spug-list at mail.pm.org http://spugwiki.perlocity.org
> ACCOUNT CONFIG: http://mail.pm.org/mailman/listinfo/spug-list
> MEETINGS: 3rd Tuesdays, Location Unknown
WEB PAGE: http://www.seattleperl.org
-------------- next part --------------
An embedded message was scrubbed...
From: Brian Hatch <bri at ifokr.org>
Subject: Re: SPUG: re-size array
Date: Mon, 11 Oct 2004 17:34:56 +0000
Size: 1942
Url: http://mail.pm.org/archives/spug-list/attachments/20041011/6f3f809e/attachment.eml
More information about the spug-list
mailing list