in reply to Converting Arrays into Matrix

using hash-slices for set arithmetics:

use strict; my @AoA=( ['A','B','C'], ['A','D','C'], ['A','B','C'], ); my (%join,@AoH); for (@AoA) { @join{@$_}=(); my %set; @set{@$_}=(); push @AoH,\%set; } for my $elem (sort keys %join) { for (@AoH){ print "$elem" if exists $_->{$elem}; print "\t"; } print "\n"; }

prints

A	A	A	
B		B	
C	C	C	
	D		

Cheers Rolf

Replies are listed 'Best First'.
Re^2: Converting Arrays into Matrix
by Anonymous Monk on Apr 27, 2011 at 10:56 UTC

    Oh, I didn't see the previous two posts.
    They find indeed the correct number of common "rows". There is however the problem that the order is not fully conserved.

    [qw( A B C D E F G H I )],[qw( A D C X F G H I )]
    With "conserved" I mean, that in the second vector, the "X" comes after the "C" and in front of "F".
    The last two versions output the aligned vectors such that the "X" is at the end, i.e. after the "I".

    The letters stand for a process flow and its order must be conserved (and there is no way of sorting them as the names are arbitrary human readable things) ;)
    Greetings, Jan
      You can use my code with which ever order you want, just provide a sorted array to loop through.

      UPDATE: you might think that the wanted sorting is obvious, but that's wrong.

      take  [[qw/A X C/][qw/A Y C/] and find a heuristic that decides the order of X and Y.

      You must be explicit about the order!!!

      Cheers Rolf

        Dear Rolf
        You are right. However, In my case, the order of X and Y will be determined by a second (or nth) different vecor.
        What I mean is: There might be an arrays, which will be processed later like
        [qw/A B C X K/][qw/A B Y I J/]
        This means, that looking vertically at it: The Y comes before the X (right after B whereas the X comes after C) ...
        I think, I am doing a really bad job in explaining ... But do you know what I mean?
        Greetings, Jan
        In another post, I have provided sample data, where the diff algorithm doesnt produce what I expect. I will try and check yours as soon as possible.
        Jan