如何确定PERL中的多阵列大小?

时间:2018-02-18 20:08:49

标签: arrays perl

我创建了一个2d(mxn)数组@ ary_2d,用于从不同文件中读取不同的值。因此,m和n值不断变化。确定标量非常困难,因为每个文件都有不同的数据集,特别是对于不同的m值。如何以简单的方式确定m和n?对于1d数组,让我们说@ ary_1d,我可以使用$#ary_1d来决定它。如何以类似的方式确定m和n值?任何建议或更简单的方式将受到高度赞赏。 我们来看下面的例子。

my @ary_2d=([12,13,14,15],[67,68,69,70,71]);#row 1:[12,13,14,15],包含4个元素/列;第2行:[67,68,69,70,71],包含5个元素/列

在1d数组中,像@ ary_1d一样,我们可以使用     $#ary_id 获得这个数组的大小。但是,当我们处理2个或更高维数组时,我们如何获得m值(行值)?任何简单明了的命令都将受到高度赞赏。

最佳, 利昂

2 个答案:

答案 0 :(得分:1)

$#array为您提供最后一个元素的索引,大小实际上是$#array + 1scalar @array(或标量上下文中的@array)。要获得嵌套数组的大小,请使用dereference:

#!/usr/bin/perl
use warnings;
use strict;
use feature qw{ say };

my @ary_2d=([12,13,14,15],[67,68,69,70,71]);

my $size = @ary_2d;
print "m: $size\n";

print "n: ", scalar @$_, "\n" for @ary_2d;

答案 1 :(得分:1)

use List::Util qw( max );
my @ary_2d=([12,13,14,15],[67,68,69,70,71]);
printf "%dx%d\n", 0+@ary_2d, max map 0+@$_, @ary_2d;