Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

Re: How to swap rows with columns?

by johngg (Canon)
on Oct 10, 2007 at 14:22 UTC ( #643966=note: print w/replies, xml ) Need Help??


in reply to How to swap rows with columns?

I wondered how to do this if the rows were not all the same length. This is what I came up with.

use strict; use warnings; use Data::Dumper; use List::Util q{max}; my @arr = ( [ qw{ ein zwei drei } ], [ qw{ one two three four five } ], [ qw{ un deux trois quatre } ], [ qw{ uno due tre quattro cinque sei} ], ); print Data::Dumper->Dumpxs([\@arr], [q{*arr}]); my @transposed = map { my $col = $_; [ map { exists $arr[$_]->[$col] ? $arr[$_]->[$col] : undef } 0 .. $#arr ] } 0 .. max(map { $#{ $_ } } @arr); print Data::Dumper->Dumpxs([\@transposed], [q{*transposed}]);

Here's the output.

@arr = ( [ 'ein', 'zwei', 'drei' ], [ 'one', 'two', 'three', 'four', 'five' ], [ 'un', 'deux', 'trois', 'quatre' ], [ 'uno', 'due', 'tre', 'quattro', 'cinque', 'sei' ] ); @transposed = ( [ 'ein', 'one', 'un', 'uno' ], [ 'zwei', 'two', 'deux', 'due' ], [ 'drei', 'three', 'trois', 'tre' ], [ undef, 'four', 'quatre', 'quattro' ], [ undef, 'five', undef, 'cinque' ], [ undef, undef, undef, 'sei' ] );

I imagine some of the modules mentioned could cope with this but haven't checked.

Cheers,

JohnGG

Replies are listed 'Best First'.
Re^2: How to swap rows with columns?
by BrowserUk (Pope) on Oct 10, 2007 at 16:00 UTC

    Nice variation of the problem.

    @arr = ( [ qw{ ein zwei drei } ], [ qw{ one two three four five } ], [ qw{ un deux trois quatre } ], [ qw{ uno due tre quattro cinque sei} ], );; push @xformed, [ map{ shift @$_ } @arr ] while @{ $arr[-1 ] };; print pp @xformed;; ( ["ein", "one", "un", "uno"], ["zwei", "two", "deux", "due"], ["drei", "three", "trois", "tre"], [undef, "four", "quatre", "quattro"], [undef, "five", undef, "cinque"], [undef, undef, undef, "sei"], )

    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.
      Now that's very neat! BrowserUk++

      Cheers,

      JohnGG

        Not so neat after all. It relies on the fact that your data had the biggest sub-array last. Move it to any other position and it fails. You still need max() for a proper solution.


        Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
        "Science is about questioning the status quo. Questioning authority".
        In the absence of evidence, opinion is indistinguishable from prejudice.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://643966]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others studying the Monastery: (5)
As of 2021-11-28 23:34 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?