tags:

views:

862

answers:

2

I am new to this field. So kindly go easy on me. I have two arrays:

@array1 = ("ABC321", "CDB672", "PLE89",....);

@array2 = ("PLE89", "ABC678", "LMD789",...);

I want to compare elements of these two different arrays. But, I want to only match letters with letters. So for instance, if arrays are compared, $array[2] element (PLE) should match with $array2[0] (PLE) and similarly $array1[0] (ABC) should match with $array[1] (ABC). I am able to do it one at time but not able to compare all elements of both array at the same time (that is looping the arrays).

    my ($value1)= ($array[2]=~ /([A-Z]+)[0-9]+/);
    print "Value1: $value1 \n";
    my ($value2)= ($array[0]=~ /([A-Z]+)[0-9]+/);
    print "Value2 : $value2 \n";
    if ($value1 eq $value2){
            print " length \n";
    }

Any suggestions on how to do I set up loop for both arrays at the same time?

+2  A: 

Language-agnostic suggestion would be to sort both arrays first (should take you O(n lg(n)), then compare with two iterators in linear time. If performance is not an issue, just keep it simple and go with quadratic number of pair-wise comparisons. While sorting you can also get rid of digits in the end.

MadH
+4  A: 

You can use a hash as a lookup device and get an O(m+n) solution (where m is the length of array1 and n is the length of array2).

#!/usr/bin/perl

use strict;
use warnings;

my @array1 = qw(ABC321 CDB672 PLE89);
my @array2 = qw(PLE89  ABC678 LMD789);

my %seen;

for my $item (@array1) {
    die "not a valid item: $item"
     unless my ($key) = $item =~ /([A-Z]+)/;

    #we are using an array to hold the items in case
    #the same key shows up more than once in an array
    #this code can be simpler if you can guarantee 
    #that the keys are unique
    push @{$seen{$key}}, $item;
}

for my $item (@array2) {
    die "not a valid item: $item"
     unless my ($key) = $item =~ /([A-Z]+)/;
    if (exists $seen{$key}) {
     print "$item is in array1, it matches @{$seen{$key}}\n";
    } else {
     print "$item is not in array1\n";
    }
}
Chas. Owens