Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

Hi Monks!
All I am doing here is comparing these two arrays and if an element found on the second arrays match the first, don't duplicate the values. My question is about getting an opinion about the way I am doing this here. I need to make sure that @all_checked will have a value at the end.
Thanks for your opinion and help!.
@account = qw (1234567 9877654 3233480); @checked_account = qw(9877654); # this could be empty as well my @all_checked; if(@checked_account) { @all_checked = keys %{ { map { $_, 1} (@account, @checked_account) +} }; print "\nAll Checked=*@all_checked*\n\n"; }else{ @all_checked = @account; } print "Account is @account -\n\n"; print "Checked_account is:@checked_account -\n\n"; print "All_check is: @all_checked -\n";

Replies are listed 'Best First'.
Re: Comparing arrays and efficiency
by ikegami (Patriarch) on Mar 17, 2010 at 18:47 UTC

    Aside from losing the order, I don't see a problem with the way you are doing it. It scales well, O(N+M) compared with the naïve solution's O(N*M).

    If you care about the order, you can use

    my %seen; @all_checked = grep !$seen{$_}++, @account, @checked_account;