in reply to Comparison effeciency

A hash will work much better here:
# Why was this line in the loop? It appears to be 'constant' # WRT to $j... # convert the binaries to decimals out here before we get into the loo +p... my @final_values = map { bintodec($_) } split(/[\s|\t]+/, $current_cas +e); my %hash; # just initialize these, but need no values... @hash{ @final_values } = (); my $not_found = 0; for $j (0..((2**$current_size) - 1)) { $not_found ||= !defined(%hash{ $j }); last if $not_found; } # $not_found will be 1 if at least one was missed...
(Update should be !defined....)
Dr. Michael K. Neylon - mneylon-pm@masemware.com || "You've left the lens cap of your mind on again, Pinky" - The Brain

Replies are listed 'Best First'.
Re: Re: Comparison effeciency
by flounder (Novice) on Apr 05, 2001 at 05:07 UTC
    Thanks, you're right, the split should not be in the loop. Now, as a follow up, how would you check for multiple existences in the hash, and count them as you go along? Also, if you wouldn't mind, could you explain what exactly the ||= operator does. Thanks again!
      ||= either sets the variable on the left hand side to the value on the left hand side (unmodified, IOW) if it's not false, or sets it to the right hand side value. Now that I think about it, it's not necessary in this case ( you can just do $not_found = (!defined(...), and last to escape the loop...), but it's useful for optional parameters from command line or CGI scripts.

      Now, are you talking about multiple existences in your original array? To do that, simply apply a similar approach, as an example...

      my %hash; foreach $item (@array) { $hash{ $item } = ( !defined( $hash{ $item } ) ) ? $hash{ $item }++ : 1; }
      Which will count and enumerate all duplicates in your list.
      Dr. Michael K. Neylon - mneylon-pm@masemware.com || "You've left the lens cap of your mind on again, Pinky" - The Brain