Perl的。打印矩阵的每个元素元素

时间:2014-06-01 17:49:05

标签: arrays perl

我创建了一个函数,它生成一个随机矩阵并将其推入数组。

sub gen {
  my $x = int(rand($_[0]-1)+1);
  my $y = int(rand($_[1]-1)+1);
  my $matrix = [ map [ map int(rand($_[2]-1)+1), 1..$x ], 1..$y ];
}

push (my @gen, gen(5,10,5))

我只想对每个数组中的元素进行排序:

sub sort {

  foreach my $value (@gen) {

    foreach (@$value) {
      foreach my $_ (sort {$b <=> $a} @{$value}) {
        print "$_";
      }
      print "\n";
    }
  }
}

它只给我引用数组,但我认为它应该是标量。

输出

ARRAY(0xdbef68)ARRAY(0xdbeef0)ARRAY(0xdbee78)ARRAY(0xdbee00)ARRAY(0xdbed88)
ARRAY(0xdbef68)ARRAY(0xdbeef0)ARRAY(0xdbee78)ARRAY(0xdbee00)ARRAY(0xdbed88)
ARRAY(0xdbef68)ARRAY(0xdbeef0)ARRAY(0xdbee78)ARRAY(0xdbee00)ARRAY(0xdbed88)
ARRAY(0xdbef68)ARRAY(0xdbeef0)ARRAY(0xdbee78)ARRAY(0xdbee00)ARRAY(0xdbed88)
ARRAY(0xdbef68)ARRAY(0xdbeef0)ARRAY(0xdbee78)ARRAY(0xdbee00)ARRAY(0xdbed88)

1 个答案:

答案 0 :(得分:1)

您的函数将引用返回到引用数组[[...],[...]],但您将其视为直接引用数组([...],[...])

最简单的解决方案是让函数返回一个数组数组。以下内容还通过将参数分配给命名变量来使您的代码更加自我记录:

sub gen{
    my ($max_cols, $max_rows, $max_val) = @_;

    my $cols = 1 + int rand($max_cols - 1);
    my $rows = 1 + int rand($max_rows - 1);
    my @matrix = map {
        [map {1 + int rand($max_val - 1)} (1..$cols)]
    } (1..$rows);

    return @matrix;   # <--- returns an array now
}

my @gen = gen(5,10,5);  # <--- so you can assign to an array

或者,如果你保持相同的功能,你可以分配回标量并取消引用它:

my $array_ref = gen(5,10,5);

for (@$array_ref) {