簡體   English   中英

使用perl動態顯示列中的數組內容

[英]Display array content in column dynamically using perl

我想在列視圖中顯示數組內容。 例如:我的數組包含9個值,如下所示:

@numbers = ("One","Two","Three","Four","Five","Six","Seven","Eight","Nine");

我想在2列中顯示如下值:

One      Two
Three    Four
Five     Six
Seven    Eight
Nine

我可以使用如上所示的表和顯示,但我想動態地使用循環來做一個非常大的數組。

任何人都可以幫我這個。

謝謝

Avinesh

使用拼接,您還可以修改列數:

use strict;
use warnings;

my @numbers = ("One","Two","Three","Four","Five","Six","Seven","Eight","Nine");
my $numcols = 2;
while (@numbers) {
  print join("\t", splice(@numbers,0, $numcols)), "\n";
}

一個簡單的數學技巧也可以做到這一點。 檢查數組索引是否可以被2整除。如果是,只要它不是第0個元素就打印換行符。

my @numbers = ("One","Two","Three","Four","Five","Six","Seven","Eight","Nine");

foreach my $i (0..$#numbers) {
  print "\n" if ($i%2 == 0 and $i != 0);
  print $numbers[$i] . "\t";
}

如果你想要一些可打印的東西而不是標簽,

push @data, '' if @data % 2 != 0;

my $col1_width = 0;
my $col2_width = 0;
for (my $i=0; $i<@data; ) {
   $col1_width = length($data[$i]) if length($data[$i]) > $col1_width; ++$i;
   $col2_width = length($data[$i]) if length($data[$i]) > $col2_width; ++$i;
}

my $format = "%-${col1_width}s  %-${col2_width}s\n";
printf($format, splice(@data, 0, 2))
   while @data;

您應該利用CPAN的強大功能,使用模塊Data :: Tabulator 它完全符合您的需要, “從列表(一維數組)創建一個表(二維數組)”

你也可以使用map

map { print $numbers[$_] . ( ($_ + 1) % $numcols == 0 ? "\n" : "\t" ) } 0..$#numbers;

要么:

@numbers = map { $numbers[$_] . ( ($_ + 1) % $numcols == 0 ? "\n" : "\t" ) } 0..$#numbers;
print @numbers;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM