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 | [reply] [d/l] [select] |
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'
| [reply] |
#!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 | [reply] [d/l] |
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 | [reply] [d/l] [select] |
I made a recent post about Arrays of Arrays at Re: Pushing rows of data into array. That shows some examples of to access these things and determine the number of columns. Hope this is of help! | [reply] |
Sounds like you could use pairwise:
my @a1 = (
['a','b','c'],
['d','e','f'],
['g','h','i'] );
my @a2 = (
['j','k','l'],
['m','n','o','p'],
['q','r'] );
use List::MoreUtils q(pairwise);
use Data::Dumper;
my @merged = pairwise {[ @$a, @$b ]} @a1, @a2;
print Dumper \@merged;
| [reply] [d/l] [select] |
use strict;
use warnings;
my @arr1 = (
['a','b','c'],
['d','e','f'],
['g','h','i'] );
my @arr2 = (
['j','k','l'],
['m','n','o','p'],
['q','r'] );
#1 iterate using map and join
print map {(join ',',@{$arr1[$_]},@{$arr2[$_]})."\n"} 0..$#arr1;
#2 itarting modifying list separator
{ # scope to limit the effect of next statement
local $"=','; # $LIST_SEPARATOR
print map {"@{$arr1[$_]},@{$arr2[$_]}\n"} 0..$#arr1;
}
#3 or consuming arrays
while (my $one = shift @arr1 and my $two = shift @arr2){
print +(join ',',@{$one},@{$two})."\n"
}
L*
There are no rules, there are no thumbs..
Reinvent the wheel, then learn The Wheel; may be one day you reinvent one of THE WHEELS.
| [reply] [d/l] |