Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?

Re: search multiple lists

by mlh2003 (Scribe)
on Mar 04, 2005 at 00:34 UTC ( #436427=note: print w/replies, xml ) Need Help??

in reply to search multiple lists

One solution would be to grep each list and return with 'found' if the variable was found in the list. I am assuming you have an array of arrays here, and $variable contains the number you are searching for in each list:
for $i (0 .. $#@AoA) { if (grep(/$variable/, @{$AoA[$i]})) { print "List " . $i+1 . "contains $variable.\n"; } }

Replies are listed 'Best First'.
Re^2: search multiple lists
by Annemarie (Acolyte) on Mar 04, 2005 at 08:10 UTC
    Thank you. It took me a while to get it going and not all of your suggestions worked but this is how the relevant part of my code looks like now.
    @tect1=(1,5,6,8,16,20); @tect2=(1,7,10,12,13,14,15,18,19,22,23,24,46); @tect3=(1,2,3,9,10,11,17,21,24,39,46); @tectlist=(\@tect1, \@tect2, \@tect3); $variable=19; #as an example for $i (0..$#tectlist) { if (grep (/$variable/, @{$tectlist[$i]})){ print" List"; $listnumber=$i+1; print" $listnumber"; print " contains $variable.\n"; } }
      A few comments. One thing is any time you see a few variables whose names end in numbers, especially small sequential numbers (@tect1, @tect2, @tect3) you're usually better off seeing if you can't make them into an array. Nine times out of ten, you end up wanting to treat them that way anyway. So in this case you could make an array of arrays in the first place.

      The other problem I see is your grep. You're using the number you're looking for as a regexp. That works sometimes, but if you look for, say /1/ the list (7,10,12) it'll be found (because the string "10" contains the string "1"). So here's how I would have written this part.

      @tectlist = ( [1,5,6,8,16,20], [1,7,10,12,13,14,15,18,19,22,23,24,46], [1,2,3,9,10,11,17,21,24,39,46], ); $variable=19; for my $i (0..$#tectlist) { if (grep {$_ == $variable} @{$tectlist[$i]}){ my $listnumber = $i+1; print "List $listnumber contains $variable.\n"; } }
        Very good points, Eimi Metamorphoumai! I didn't think of the potential grep problem when posting my reply...
        Code is untested unless explicitly stated

Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://436427]
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 2021-10-26 09:50 GMT
Find Nodes?
    Voting Booth?
    My first memorable Perl project was:

    Results (90 votes). Check out past polls.