Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation

Re: Re: Processing arrays 2 elements at a time (TIMTOWTDI)

by ichimunki (Priest)
on Aug 02, 2002 at 19:38 UTC ( #187189=note: print w/replies, xml ) Need Help??

in reply to Re: Processing arrays 2 elements at a time (TIMTOWTDI)
in thread Processing arrays 2 elements at a time (TIMTOWTDI)

So don't make your copy first. It's a reference after all, which in this case makes life easy.
my @copy; while (@$r) { push @copy, [ shift @$r, shift @$r ]; } $r = \@copy;
This way we build our new array (while the one gets bigger, the other gets smaller), then we simply change what the reference points to.

Replies are listed 'Best First'.
Re: Re: Re: Processing arrays 2 elements at a time (TIMTOWTDI)
by petral (Curate) on Aug 02, 2002 at 21:50 UTC
    That's very neat.   My only point was that the way grinder was presenting it (non-destructive of the original array), it would probably not be the fastest if the array copy was not hidden in the overhead for the subroutine call.

      I'm sorry. I guess I thought his requirements didn't preclude a destructive routine, since he opens with $r = [1,2,3,4,5,6] and wants to replace that with $r = [[1,2],[3,4],[5,6]] and both the shifter and splicer techniques in the benchmark are destructive. My money's on the c-loop for non-destructive, and if I had large tuples or frequently changing tuple lengths, I'd use splicer in spite of the speed hit shown here.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://187189]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (4)
As of 2020-05-30 17:58 GMT
Find Nodes?
    Voting Booth?
    If programming languages were movie genres, Perl would be:

    Results (173 votes). Check out past polls.