in reply to Accessing 2 multidimensional arrays simultaneously

Hi Ppeoc,

Assuming both arrays have the same number of "rows" (first index) and you know how many "columns" (second index) they have in common, one way is to use indicies, something like this:

my @a1 = ( ['a','b','c'], ['d','e','f'], ['g','h','i'] ); my @a2 = ( ['j','k','l'], ['m','n','o','p'], ['q','r'] ); for my $r (0..$#a1) { for my $c (0..1) { print "[$r][$c] a1=$a1[$r][$c] a2=$a2[$r][$c]\n"; } } __END__ [0][0] a1=a a2=j [0][1] a1=b a2=k [1][0] a1=d a2=m [1][1] a1=e a2=n [2][0] a1=g a2=q [2][1] a1=h a2=r

Although I'm wondering a bit about your sample script: You join the array @data into a single element, so your arrays aren't really "multidimensional" if each "row" only has one element. Why not just drop the line @data = join (",",@data);?

Hope this helps,
-- Hauke D

Replies are listed 'Best First'.
Re^2: Accessing 2 multidimensional arrays simultaneously
by Ppeoc (Beadle) on May 04, 2016 at 18:14 UTC
    Thanks on your suggestion for dropping the join line to make it truly multidimensional. I am sorry that my question wasn't clear before. I want to display row 1 of the 1st array and then row 1 of the 2nd array. Like this: 'a','b','c','j','k','l'
      #!perl use strict; my @array1 = ( ['a','b','c'], ['d','e','f','g'], ['h','i'] ); my @array2 = ( [1,2,3], [4,5,6,7,8], [9,10] ); my $i = 0; foreach my $ar1 (@array1) { my $ar2 = $array2[$i++]; print join ',', @$ar1,@$ar2; print "\n"; }
      poj

      Hi Ppeoc,

      I see what you mean. If it's always the first row, it's fairly simple: print join(",", @{$a1[0]}, @{$a2[0]}), "\n"; - for an explanation of the dereferencing syntax see perlreftut and maybe perldsc. If you want to do this to all the rows, assuming both arrays have the same number of rows, just add a loop:

      my @a1 = ( ['a','b','c'], ['d','e','f'], ['g','h','i'] ); my @a2 = ( ['j','k','l'], ['m','n','o','p'], ['q','r'] ); for my $r (0..$#a1) { print join(",", @{$a1[$r]}, @{$a2[$r]}), "\n"; } __END__ a,b,c,j,k,l d,e,f,m,n,o,p g,h,i,q,r

      And if you want single quotes around the values: print join(",", map {"'$_'"} @{$a1[0]}, @{$a2[0]}), "\n";

      Hope this helps,
      -- Hauke D