我有一個2d perl數組,我想垂直打印每個數組,但是我不知道最大數組的大小。我將如何迭代矩陣?如何在perl中垂直打印2d陣列中的每個陣列
我@AoA =(
[ 「ABC」, 「DEF」,1,2,3],
[ 「等等」, 「blah2」,2],
[ 「你好」,「世界「,」如何「,」是「,」你「,」幹嘛?「,
);期望的輸出:
abc blah hello
def blah2 world
1 2 how
2 null are
3 null you
null null doing
0
A
回答
0
use List::Util qw(max);
# calculate length of longest sub-array
my $n = max map { scalar(@$_) } @AoA;
for (my $i = 0; $i < $n; ++$i) {
# the inner map{} pulls the $i'th element of each array,
# replacing it with 'null' if $i is beyond the end;
# each piece is then joined together with a space inbetween
print join(' ', map { $i < @$_ ? $_->[$i] : 'null' } @AoA) . "\n";
}
輸出
abc blah hello
def blah2 world
1 2 how
2 null are
3 null you
null null doing?
這有點密集,難以閱讀。將這條線分成幾行(一行創建所有$i
'元素的臨時數組,另一行將它們連接在一起,另一行用於打印結果),可以使其更易讀。
1
最好的方法是掃描您的數據兩次:首先建立列中項目的最大數量和項目的最大寬度,然後實際顯示數據。
此程序演示
use strict;
use warnings;
my @AoA = (
["abc", "def", 1, 2, 3],
["blah", "blah2", 2],
["hello", "world", "how", "are", "you", "doing?"],
);
my $maxrow;
my $maxwidth;
for my $col (@AoA) {
my $rows = $#$col;
$maxrow = $rows unless $maxrow and $maxrow >= $rows;
for my $item (@$col) {
my $width = length $item;
$maxwidth = $width unless $maxwidth and $maxwidth >= $width;
}
}
for my $row (0 .. $maxrow) {
my $line = join ' ', map sprintf('%-*s', $maxwidth, $_->[$row] // ''), @AoA;
print $line, "\n";
}
輸出
abc blah hello
def blah2 world
1 2 how
2 are
3 you
doing?
更新
這是很容易提供修改後的輸出,因爲沒有必要計算最大字段寬度。
use strict;
use warnings;
my @AoA = (
["abc", "def", 1, 2, 3],
["blah", "blah2", 2],
["hello", "world", "how", "are", "you", "doing?"],
);
my $maxrow;
for my $col (@AoA) {
$maxrow = $#$col unless $maxrow and $maxrow >= $#$col;
}
for my $row (0 .. $maxrow) {
print join(' ', map $_->[$row] // 'null', @AoA), "\n";
}
輸出
abc blah hello
def blah2 world
1 2 how
2 null are
3 null you
null null doing?
相關問題
- 1. 使用1d陣列打印2d陣列
- 2. 在ARM中打印2D陣列
- 3. 無法在Java中打印2d陣列
- 4. Reversi 2D陣列打印
- 5. C++打印2d陣列
- 6. Java中的2D陣列打印格式
- 7. 垂直打印垂直陣列的一維切片
- 8. perl mason中的打印陣列
- 9. 2D陣列垂直和水平翻轉
- 10. 陣列中的陣列打印元素
- 11. 如何垂直打印Python中不同長度的2D列表
- 12. 印刷2D陣列
- 13. 如何在一行中打印2D陣列的行?
- 14. 從2D陣列乘以每列與另一個2D陣列的每列
- 15. 打印陣列陣列,每個內部在單獨一行
- 16. 問題打印的陣列在Perl
- 17. 從Perl陣列/散列打印信息
- 18. 在JOptionPane中打印陣列
- 19. 在php中打印陣列
- 20. 如何在perl中打印數組的陣列 - 參考變量
- 21. 如何打印2D陣列看起來像網格/矩陣?
- 22. 爲陣列的每個元素打印陣列長度
- 23. 如何在java中打印陣列
- 24. 迭代陣列列表並打印陣列中的每個元素
- 25. 陣列,打印的東西每兩列
- 26. 如何打印2D陣列中從數據庫PHP的值
- 27. D中的打印陣列
- 28. Java中的打印陣列
- 29. 如何修復打印爲一列的2D陣列
- 30. 打印在陣列
您已經改變了您所需要的輸出。那是故意的嗎? – Borodin