2013-02-25 160 views
1

我是新来的Perl,想乘两个数组:如何乘数组并将结果作为perl中的矩阵输出?

my @array1 = (1,2,3); 
my @array2 = (2,4,6); 

,并打印出这样的:

 # output == 
     #   2 4 6 
     #   4 8 12 
     #   6 12 18 

编辑:

得到它

my @array1 = (1,2,3); 
my @array2 = (2,4,6); 

multiply_array(\@array1, \@array2); 

sub multiply_array{ 
    my ($a1, $a2)[email protected]_; 
    for(my $i=0; $i<3; $i++){ 
     for(my $j=0; $j<3; $j++){ 
      my $x = @$a1[$i]*@$a2[$j]; 
      print $x."\t"; 
     } 
     print "\n"; 
    } 
} 
+0

看到我更新的答案...... – Koterpillar 2013-02-25 22:11:25

+0

这是一个草率的方式做到这一点; '@ $ a1 [$ i] * @ $ a2 [$ j]'做两个数组切片;你只需要数组元素:'$$ a1 [$ i] * $$ a2 [$ i]'(或'$ a1 - > [$ i] * $ a2 - > [$ j]') – ysth 2013-02-26 01:47:22

回答

5

您正在尝试对阵列执行的操作称为笛卡尔积。

创建阵列与笛卡尔乘积的数组:

my @product = map { my $a = $_; [map { $_ * $a } @array2] } @array1; 

打印它在一个非常详细的格式:

use Data::Dumper; 
Dumper(@product); 

刚印刷的产品,而不将其存储到一个数组:

for my $x (@array1) { 
    for my $y (@array2) { 
     print $x * $y . "\t"; 
    } 
    print "\n"; 
} 
+0

我该如何创建有这个数组的数组? – Stephen 2013-02-25 22:17:29

+0

更新了答案。 – Koterpillar 2013-02-25 22:23:19

0

您已将数组的引用传递给函数。

因此,您需要使用->来访问数组元素。

这里是你可以做什么:

use strict; 
use warnings; 

my @array1 = (1,2,3); 
my @array2 = (2,4,6); 

multiply_array(\@array1, \@array2); 

sub multiply_array{ 
    my ($a1, $a2)[email protected]_; 
    for(my $i=0; $i<3; $i++){ 
     for(my $j=0; $j<3; $j++){ 
      my $x = $a1->[$i]*$a2->[$j]; 
      print $x."\t"; 
     } 
     print "\n"; 
    } 
} 
相关问题