在Perl中构建和打印多维列表而不进行循环

Ame*_*ina 0 perl multidimensional-array

这篇文章的最佳答案:如何在Perl中创建多维数组?建议建立一个多维数组如下:

my @array = ();
foreach my $i ( 0 .. 10 ) {
  foreach my $j ( 0 .. 10 ) {
    push @{ $array[$i] }, $j;
  }
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一种方法可以更紧凑地构建数组并避免嵌套循环,例如使用类似的东西:

my @array = ();
my @other_array = (0 ... 10);
foreach my $i ( 0 .. 10 ) {
    $array[$i] = @other_array; # This does not work in Perl
  }
}
Run Code Online (Sandbox Code Playgroud)

Perl是否支持任何语法来构建没有嵌套循环的多维数组?

同样,有没有办法在没有(嵌套)循环的情况下打印多维数组?

Zai*_*aid 7

有多种方法可以做到:

发电

push接受LISTs

my @array;
push @{$array[$_]}, 0 .. 10 for 0 .. 10;
Run Code Online (Sandbox Code Playgroud)

替代语法:

my @array;
push @array, [ 0 .. 10 ] for 0 .. 10;
Run Code Online (Sandbox Code Playgroud)

map 秀色可餐

my @array = map { [ 0 .. 10 ] } 0 .. 10;
Run Code Online (Sandbox Code Playgroud)

替代语法:

my @array = map [ 0 .. 10 ], 0 .. 10;
Run Code Online (Sandbox Code Playgroud)

印花

最小的循环

print "@$_\n" for @array;
Run Code Online (Sandbox Code Playgroud)

在Perl 5.10+上

use feature 'say';
say "@$_" for @array;
Run Code Online (Sandbox Code Playgroud)

具有更多格式控制

print join( ', ', @$_ ), "\n" for @array;   # "0, 1, 2, ... 9, 10"
Run Code Online (Sandbox Code Playgroud)

"没有循环" (循环对你隐藏)

use Data::Dump 'dd';
dd @array;
Run Code Online (Sandbox Code Playgroud)

Data::Dumper

use Data::Dumper;
print Dumper \@array;
Run Code Online (Sandbox Code Playgroud)

请查看perldoc perllol更多详细信息

  • @roseck:你不能像这样引用列表切片,所以你需要使用`$ array [$ i] = [@sample [1 .. $#sample]];` (2认同)