用格式化打印嵌套列表
我正在尝试编写一个Perl函数,它接受两个列表/数组并计算它们的交叉乘积(笛卡尔乘积)。我目前有代码工作,需要两个输入列表并计算交叉产品,但我无法打印嵌套的列表。用格式化打印嵌套列表
我正在寻找关于最佳打印嵌套列表的建议。这是我的作品目前的尝试:
for(@C) {
for(@$_) {
print $_;
}
print " ";
}
# prints
# 1A 1B 1C 1D 1E 1F 1G 1H 1I
# 2A 2B 2C 2D 2E 2F 2G 2H 2I
# 3A 3B 3C 3D 3E 3F 3G 3H 3I
# 4A 4B 4C 4D 4E 4F 4G 4H 4I
# etc ...
但这并没有看佩尔利对我来说足够。所以,我再次试图与map
:
print map {
map { $_ } @$_;
} @C;
# prints
# 1A1B1C1D1E1F1G1H1I
# 2A2B2C2D2E2F2G2H2I
# 3A3B3C3D3E3F3G3H3I
# 4A4B4C4D4E4F4G4H4I
# etc ...
但项目都压在一起。无论如何用map
来格式化这种方法?有更好的方法来完成这个吗?
全功能代码:
use strict;
use warnings;
# globals
my @digits = (1,2,3,4,5,6,7,8,9);
my @letters = ("A","B","C","D","E","F","G","H","I");
my @rows = @digits;
my @cols = @letters;
my @squares = cross(\@rows, \@cols);
sub cross {
my @C = [];
foreach (reverse @_) {
my @A = @$_;
@C = map { my $n = $_; map { [ $n, @$_ ] } @C } @A;
}
# works
#for(@C) {
# for(@$_) {
# print $_;
# }
# print " ";
#}
print map {
map { $_ } @$_;
} @C;
return @C;
}
print map { join '', @$_, ' ' } @C;
这正是我所期待的。谢谢! –
有没什么可说的map
不能返回格式的字符串:
print map { " $_" };
或者为了控制更加精确,使用加入:
print join ' ', map { ... };
默认情况下,数组会插入到字符串中,因为您希望它们在这里。所以:
#! /usr/bin/env perl
use common::sense;
my @a = ([qw/1A 1B 1C 1D 1E 1F 1G 1H 1I/],
[qw/2A 2B 2C 2D 2E 2F 2G 2H 2I/],
[qw/3A 3B 3C 3D 3E 3F 3G 3H 3I/],
[qw/4A 4B 4C 4D 4E 4F 4G 4H 4I/],
['etc', '...']);
say "# prints";
say "# @$_" for @a;
输出:
# prints
# 1A 1B 1C 1D 1E 1F 1G 1H 1I
# 2A 2B 2C 2D 2E 2F 2G 2H 2I
# 3A 3B 3C 3D 3E 3F 3G 3H 3I
# 4A 4B 4C 4D 4E 4F 4G 4H 4I
# etc ...
另外,
local $" = ', ';
say "# @$_" for @a;
输出:
# 1A, 1B, 1C, 1D, 1E, 1F, 1G, 1H, 1I
# 2A, 2B, 2C, 2D, 2E, 2F, 2G, 2H, 2I
# 3A, 3B, 3C, 3D, 3E, 3F, 3G, 3H, 3I
# 4A, 4B, 4C, 4D, 4E, 4F, 4G, 4H, 4I
# etc, ...
感谢您的支持。我并没有对字符串进行硬编码,但是我正在使用'(1,2,3,4,5,6,7,8,9)'和'(A,B,C,D,E,F,G, H,I)'并计算笛卡尔乘积以得到所有其他字符串。 –
你能解释一下你分配给'@ a'的第一块代码是做什么的吗? –
@HunterMcMillen,'([qw/a b c /],[qw/1 2 3 /])'是一个arrayrefs列表。它相当于'(['a','b','c'],[1,2,3])',这个对@a的赋值相当于:'my @a; $ a [0] [0] ='a'; $ a [0] [1] ='b'; ...; $ a [1] [2] = 3;' –
为什么'地图{$ _} @ $ _'?这与“@ $ _”有什么不同? – Flimzy
@Flimzy'@ $ _'是一个数组引用,我想查看各个元素。 –
为什么downvote这个问题? –