in reply to Array Difference for Two Dimentional Array!

Your use of SQUARE BRACKETS causes the arrays to contain a single element.

That element is a reference to an array.

Since you are beginner, it would seem that this structure is not intentional.

Also, you have not posted what code you are running to compare the arrays and extract unique elements. By the way, the algorithm to do this is covered in the perl documentation FAQ.

It is difficult to suggest a course of action other than to gently request you to please RTFM,and read How (Not) To Ask A Question.

Update: The OP has modified the node, and replaced square brackets with parens, and added code, since this response was posted.

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

  • Comment on Re: Array Difference for Two Dimentional Array!

Replies are listed 'Best First'.
Re^2: Array Difference for Two Dimentional Array!
by nashkab (Novice) on Jan 07, 2008 at 01:16 UTC
    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.

      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.

      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