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

Re: Merged list with regex matches

by ikegami (Patriarch)
on Sep 04, 2007 at 15:51 UTC ( [id://636968]=note: print w/replies, xml ) Need Help??


in reply to Merged list with regex matches

Fundametally you will need two nested loops, even if they are not obviously visible. (e.g. One could be hidden in a regexp.) However, it is possible to optimise the loops.

Possible optimisation one: Don't compile the same regexp over and over again:

for my $bn ( @B_CHECKS ) { my $re = qr/^(?:0|5|6)0+\Q$bn\E$/; for my $cn ( @CS_CHECKS ) { if ( $cn =~ $re ) { print "$bn = $cn\n"; } } }

Possible optimisation two: Create a single regexp:

my ($re) = map qr/^(?:0|5|6)0+($_)$/, join '|', map quotemeta, @B_CHECKS; for my $cn ( @CS_CHECKS ) { if ( $cn =~ $re ) { print "$1 = $cn\n"; } }

Possible optimisation three: Create a single regexp using Regexp::List

use Regexp::List qw( ) my $re = Regexp::List->new->list2re(@B_CHECKS); $re = qr/^(?:0|5|6)0+($re)$/; for my $cn ( @CS_CHECKS ) { if ( $cn =~ $re ) { print "$1 = $cn\n"; } }

Possible optimisation four: Get rid of the regexp entirely, and do hash lookups. This will only work (as is) if $bn will never match /^(?:0|5|6)0+/.

my %B_CHECKS = map +($_ => 1), @B_CHECKS; for my $cn ( @CS_CHECKS ) { (my $bn = $cn) =~ s/^(?:0|5|6)0+//; if ( $B_CHECKS{$bn} ) { print "$bn = $cn\n"; } }

Update: Added #3

Replies are listed 'Best First'.
Re^2: Merged list with regex matches
by tcf03 (Deacon) on Sep 04, 2007 at 16:35 UTC
    #4 Looks like what I need, I will need to double check that $bn will not match /^(0|5|6)0+/ These lists are fairly large so no matter what I do, Its going to be tough to speed up.
    Thanks!
    Ted
    --
    "That which we persist in doing becomes easier, not that the task itself has become easier, but that our ability to perform it has improved."
      --Ralph Waldo Emerson

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others musing on the Monastery: (6)
As of 2024-04-16 19:25 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found