【问题标题】:Perl. Print each element of array for matrix珀尔。打印矩阵数组的每个元素
【发布时间】:2014-06-02 02:15:08
【问题描述】:

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

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)

【问题讨论】:

  • 你确定int(rand($n-1)+1) 做你想做的事吗?它生成从1$n-1 的随机整数。
  • 我只是想避免创建空矩阵

标签: arrays perl


【解决方案1】:

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

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

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) {

【讨论】:

    猜你喜欢
    • 2020-10-30
    • 2018-02-15
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多