Я пытаюсь написать функцию Perl, которая принимает два списка/массивы и вычисляет их кросс-произведение (декартово произведение). В настоящее время у меня работает код, который принимает два входных списка и вычисляет кросс-продукт, но у меня проблема с печатью вложенных списков.Печать вложенного списка с форматированием
Я ищу совет по best способ печати вложенного списка. Вот моя текущая попытка, которая работает:
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 ...
, но это не выглядело Perly достаточно для меня. Так что я сделал еще одну попытку с 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;
}
почему 'отображение {$ _} @ $ _'? Как это иначе, чем просто '@ $ _'? – Flimzy
@Flimzy '@ $ _' - это ссылка на массив, я хочу видеть отдельные элементы. –
Почему нижний предел для этого вопроса? –