Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine
 
PerlMonks  

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.


Comment on Re: Re: Processing arrays 2 elements at a time (TIMTOWTDI)
Download Code
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.

      p
      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?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others lurking in the Monastery: (4)
As of 2015-07-05 03:08 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (60 votes), past polls