in reply to are they all there?

use Array::Lookup; my @required_items = qw(apple orange pear); @collections = ( [ 'apple', 'pear' ], ['banana'] ); foreach my $collection (@collections) { foreach my $required_item (@required_items) { lookup $required_item, $collection, \&notfound; } } sub notfound { my $required_item = shift; my $collection = shift; push @{$collection}, $required_item; } foreach my $collection (@collections) { print "@{$collection}\n"; }
--Artist

Replies are listed 'Best First'.
Re^2: are they all there?
by ikegami (Patriarch) on Aug 22, 2006 at 18:11 UTC

    Your solution loops {number of collections} * {number of required items} * {number of items per collection} times.

    jhourcle's solution loops {number of collections} * ( {number of items per collection} + {number of required items} ) times.

    We weren't given any numbers, but I bet your code will get execute many more times than jhourcle's, making it much slower.

    Update: Here are some very conservative sample numbers:

    Number of collections: 5 Number of items per collection: 8 Number of items required: 10 artist: 5*8*10 = 400 iterations jhourcle: 5*(8+10) = 90 iterations

    Update: The OP gave some numbers.

    Number of collections: 5 (Conservative guess.) Number of items per collection: 12 (Middle of provided "5 to 30".) Number of items required: 6 (Provided.) artist: 5*12*6 = 360 iterations jhourcle: 5*(12+6) = 90 iterations