in reply to Re: Array Difference for Two Dimentional Array!
in thread Array Difference for Two Dimentional Array!

Hi Netwallah,

Thanks for your responce. I used the code:

my @diff; my @inter my %count2 = (); foreach my $element (@union,@ICUNAV) { $count2{$element}++; }; foreach my $element (keys %count2) { push @{ $count2{$element} > 1 ? \@inter : \@diff }, $element; }; print Dumper(@diff),"\n";

I have very little knowledge on perl. I have seen some examples on 1 dimensional array..however not on two dimensional array. Your knowledge will really help me here. Thanks in advance.

Replies are listed 'Best First'.
Re^3: Array Difference for Two Dimentional Array!
by swampyankee (Parson) on Jan 07, 2008 at 02:27 UTC

    To be pedantic, Perl doesn't have multi-dimensional arrays; it has one-dimensional arrays which have elements which may be references to arrays. In practice, this means that the elements have to be dereferenced, either explicitly, meaning that your code does it, or implicitly, meaning the dereferencing is hidden in a module. In more C-ish terms, Perl emulates two-dimensional arrays by using arrays of pointers to arrays. This can be repeated, recursively, to any arbitrary level, so a Perl array, @array could have elements which are references to arrays, which can, in turn, have elements which are references to other arrays.

    As an aside, your request appears similar to this one, which could be interpreted as your being less than diligent in your research.


    emc

    Information about American English usage here and here.

    Any Northeastern US area jobs? I'm currently unemployed.

Re^3: Array Difference for Two Dimentional Array!
by NetWallah (Canon) on Jan 07, 2008 at 05:37 UTC
    At Perlmonks, it is considered bad form to modify the contents of your post, without posting a message.

    If you need to correct something, leave the original text (or use strikethrough), then add your update below, after first clearly indicating that it is an update.

    This allows others to follow the thread of responses to your original text.

    Your updated code reads:

    @union = ((SDT,`1781183799.44927\',-----),
    This is NOT a 2-dimensional array (or Array-of-Arrays (AOA)). The proper syntax for an AOA is:
    @union = (['SDT','1781183799.44927\','-----'], ['BN','1781183799.44972\','-----'], ['BNN','1781183799.46753\','-----']);
    I replaced your backticks with single quotes, and added other quotes to make it legal for perl.

    Now, to get your @diff for this type of AOA, use this code instead of yours (UNTESTED) :

    my @diff; my @inter my %count2 = (); foreach my $element (@union,@ICUNAV) { my $k=join '',@$element; $count2{$k}{COUNT}++; $count2{$k}{ELEMENT}=$element; }; foreach my $element (keys %count2) { push @{ $count2{$element}{COUNT} > 1 ? \@inter : \@diff }, $count2{$ +element}{ELEMENT}; }; print Dumper(@diff),"\n";

         "As you get older three things happen. The first is your memory goes, and I can't remember the other two... " - Sir Norman Wisdom