Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options

Re: array within an array

by aartist (Monk)
on Oct 07, 2011 at 14:40 UTC ( #930196=note: print w/replies, xml ) Need Help??

in reply to array within an array

You need to define 'charges' properly. Do you mean to say?
@charges = ( [qw/ch1 ch2 ch3 ch4 ch5 ch6 ch7 ch8/], [qw/ch1 ch2 ch3 ch4 ch5/], [qw/ch1 ch2 ch6 ch7/], [qw/ch4/], [qw/ch3 ch9/], [qw/ch2 ch4/], )
I am inclined to provide this as you said in other comment that last ch4 should not be replaced with 'chx'.

Replies are listed 'Best First'.
Re^2: array within an array
by cesear (Novice) on Oct 07, 2011 at 15:18 UTC
    no @charges is just one long list. I am trying to simulate a groups of actually charges for one account, using this trivial example.

    ch3 ch4 ch6 as a 'group' are replaced as 'chx' in list(array) in @charges.

      I think this does what you want:

      use warnings; use strict; my @charges = qw/ch1 ch2 ch3 ch4 ch5 ch6 ch7 ch8 ch1 ch2 ch3 ch4 ch5 ch1 ch2 ch6 ch7 ch4 ch3 ch9 ch2 ch4/; my %bundle1 = map { $_ => 0 } qw(ch3 ch4 ch6); my %b = %bundle1; my @final; my @del; for (@charges) { if (exists $bundle1{$_}) { delete $b{$_}; if (!keys %b) { # seen them all, so reset %b = %bundle1; @del = (); push@final,'chx'; } else { # keep it, in case not all are seen push@del,$_; } } else { push@final,$_; } } push@final,@del; # add back any remainders print "@final\n"; __OUTPUT__ ch1 ch2 ch5 chx ch7 ch8 ch1 ch2 ch5 ch1 ch2 chx ch7 ch9 ch2 ch4 ch3 ch +4

      One possible problem: it will slightly alter the order of your list if a partial bundle is seen.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://930196]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others surveying the Monastery: (4)
As of 2018-05-21 05:59 GMT
Find Nodes?
    Voting Booth?