Perl中子数组的数组数组

时间:2014-06-04 20:50:49

标签: arrays perl

我试图获得"子阵列的数量"在数组数组中......

即:

原文:

@array = (("a","b","c"),(1,2,3),("q","w","e"));

修改:

@array = (["a","b","c"],[1,2,3],["q","w","e"]);

我如何获得这个号码? (在这种情况下,它将是3。)

3 个答案:

答案 0 :(得分:3)

你没有任何"子阵列"。

my @array = (['a','b','c'],['a','b','c'],['a','b','c']);

然后只是

print scalar @array;

打印

3

你想要一个数组数组,这可以通过一个arrayref数组来完成。可以使用[]方括号创建数组引用。

my $array_ref = ['a','b','c'];

您可以使用前导Arrayref取消引用@

print scalar @$array_ref;
# or an more readable version
print scalar @{ $array_ref }

答案 1 :(得分:2)

使用以下评论信息回复修改过的问题:

听起来你实际上拥有的数组是哈罗丁answer对前一个问题的证明:

my %hash = (
    key => [ ["a", "b", "c"], [1, 2, 3], ["q", "w", "e"] ],
);

在这种情况下,要获得计数,您需要使用scalar并取消引用数组ref:

print scalar(@{$hash{key}}), "\n";

输出:

3

答案 2 :(得分:2)

要在数组引用中计算数组引用,您可以将grepref built-in一起使用。假设你的外部数组ref中可以有其他东西以及数组引用,你可以这样做:

my @array = (["a","b","c"],[1,2,3],["q","w","e"], 4);
my $count = scalar grep { ref $_ eq 'ARRAY' } @array;
print $count;

__END__
3

它将依次查看@array的每个元素,抓取ref类型为ARRAY的元素,并将结果列表强制为标量上下文,给出元素数量


因为你似乎有一个散列引用,它包含带有数组引用的数组引用,所以可能将它改为this就可以了。我以为你可以自己做转移。

my $count = scalar grep { ref $_ eq 'ARRAY' } @{ $hashref->{element} };