Perl Monk, Perl Meditation | |
PerlMonks |
Re: how to speed lookups?by blazar (Canon) |
on Nov 12, 2008 at 19:55 UTC ( [id://723283]=note: print w/replies, xml ) | Need Help?? |
I personally believe I have some problems understanding your question: I'm very tired so it may be just me, but I'm trying to recap from your description of the problem, and please tell me if I'm getting anything wrong...
I think I eventually got it: you want to print those lines in your input file i.e. BUFFER.dat such that their first field is an element of @validbufs. Is this a correct rephrasing of your problem? If so, then the general rule is to always make that @validbufs into a hash, say %isvalid. (Although in 5.10 times you can take advantage of the smartmatch operator ~~, but I'm sure that for a problem of this size a hash is still better.) This can be just as simple as:
Then you'd simply
with $field got as per ikegami's suggestion or perhaps not even created as an intermediate variable. Now, it is to be said that since as you claim there is a 1-1 correspondence between lines that match in the file and entries of @validbufs, one may be tempted to delete from %isvalid any key that matches, to shrink it, because once it has matched it won't match any more. But given the amount of work this would inflict on %isvalid and hashes' efficiency at lookups, I'm sure that both a big-Oh analysis and experimental evidence would be that it would take more work overall than not doing it...
In Section
Seekers of Perl Wisdom
|
|