我创建了一个函数,它生成一个随机矩阵并将其推入数组。
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)
答案 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) {