in reply to Array compare
I'd use grep to find the exact matches and the numbers in one of the arrays (I used @A below) as keys in a hash (%in_A), built using a map. Finally another grep to find the matches in different columns:
use List::Util 'shuffle'; my @A = (shuffle 0 .. 5)[0 .. 3]; my @B = (shuffle 0 .. 5)[0 .. 3]; my $exact = grep { $A[$_] == $B[$_] } 0 .. 3; my %in_A = map { $_ => 1 } @A; my $inexact = (grep { $in_A{$_} } @B) - $exact; print "A = [@A]\nB = [@B]\n"; print "exact: $exact\n"; print "inexact: $inexact\n";
The inexact matches also includes the exact matches, hence the subtraction in the second grep.
Sample output:
A = [4 5 1 0] B = [3 1 5 0] exact: 1 inexact: 2
update: added sample output, improved output format & used grep to calculate inexact matches
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Array compare
by plink (Initiate) on Dec 23, 2007 at 11:57 UTC |