4

列ビューで配列の内容を表示したいと思います。例: 私の配列には、次のように 9 つの値が含まれています。

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

以下のように2列に値を表示したい:

One      Two
Three    Four
Five     Six
Seven    Eight
Nine

上記のようにテーブルとディスプレイを使用できますが、非常に大きな配列に対してループを使用して動的に同じことをしたいと考えています。

誰でもこれで私を助けてくれませんか。

ありがとうございました

アビネッシュ

4

5 に答える 5

10

スプライスを使用して、列の数を変更することもできます。

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";
}
于 2012-12-13T06:19:38.437 に答える
5

簡単な数学のトリックでもこれを行うことができます。配列インデックスが 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";
}
于 2012-12-13T08:38:16.037 に答える
1

タブの代わりに印刷可能なものが必要な場合は、

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;
于 2012-12-13T08:10:31.200 に答える
1

CPANの力を活用し、モジュールData::Tabulatorを使用する必要があります。「リスト(1次元配列)からテーブル(2次元配列)を作成する」という必要なことを正確に実行します。

于 2012-12-13T11:49:11.510 に答える
0

mapも使用できます。

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

また:

@numbers = map { $numbers[$_] . ( ($_ + 1) % $numcols == 0 ? "\n" : "\t" ) } 0..$#numbers;
print @numbers;
于 2012-12-13T11:39:41.697 に答える