我试图获得"子阵列的数量"在数组数组中......
即:
原文:
@array = (("a","b","c"),(1,2,3),("q","w","e"));
修改:
@array = (["a","b","c"],[1,2,3],["q","w","e"]);
我如何获得这个号码? (在这种情况下,它将是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)
要在数组引用中计算仅数组引用,您可以将grep
与ref
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} };