Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer

Re^2: Check array for several matches

by Lotus1 (Curate)
on May 12, 2017 at 15:28 UTC ( #1190136=note: print w/replies, xml ) Need Help??

in reply to Re: Check array for several matches
in thread Check array for several matches

My approach was almost the same as yours except I used a function so I could short circuit and return as soon an item was determined to be missing.

use warnings; use strict; use Data::Dumper; my @allwords = qw( mary had a little lamb its fleece was white as snow + ); my @checkwords = qw( little lamb fleece everywhere ); print "All words were ", check_array_for_words(\@allwords, \@checkword +s) ? "" : "not ", "found.\n"; sub check_array_for_words { my ($ar_allwords, $ar_checkwords) = @_; my %hash; foreach (@$ar_allwords){ $hash{$_} = undef; } print Dumper(\%hash); foreach (@$ar_checkwords) { if (not exists $hash{$_}) { return 0; } } return 1; } __END__ $VAR1 = { 'had' => undef, 'lamb' => undef, 'a' => undef, 'fleece' => undef, 'little' => undef, 'white' => undef, 'as' => undef, 'was' => undef, 'mary' => undef, 'snow' => undef, 'its' => undef }; All words were not found.

Replies are listed 'Best First'.
Re^3: Check array for several matches
by Marshall (Abbot) on May 13, 2017 at 00:00 UTC
    Yes, this will certainly work! I made an implicit assumption that there were very few check words (perhaps just 3) to be checked against perhaps a potentially very big list of other words. So I restricted my hash to be only the 3 checked words instead of all_words. But I think your code is just fine.

    I don't think it is necessary to beat this thing to death in all its variations. I don't know whether I actually succeeded or not, but I was attempting to address the OP's comments about searching the internet for hours and copying code that he didn't understand and that didn't work for him.

    I avoided map{} and grep{} (which are special kinds of foreach loops) and attempted to write very simple loops in the hope that the OP will take the time to understand them. I added a whole lot of verbiage in an attempt to explain an example of the algorithmic thought process. I am hoping that the OP learned not only a solution to this current problem, but also stuff that is helpful to future problems.

      The short circuit thing doesn't add much for three items, that's true. Probably isn't a noticeable difference for anything less than 3,000 really. I had already written mine up before I noticed yours so it seemed fitting to put it with yours.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1190136]
and the daffodils sway...

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