假设:
my @main_array = ();
my @sub_array1 = ( 1, 2, 3, 4, 5);
my @sub_array2 = ( "a", "b", "c", "d", "e" );
push @main_array, \@sub_array1;
push @main_array, \@sub_array2;
print "size of main_array is ",scalar(@main_array),"\n";
我想通过main_array和 然后通过它包含的两个数组 我不知道它的语法是什么。
不知道这是否正确,但Perl似乎想在前面拿一个$ foreach变量在这里。 (不喜欢@ $ sub_array) 我也想知道循环通过main和sub的语法。
foreach my $sub_array (@main_array)
{
print $sub_array; # prints ARRAY(0x213232)
# loop through each item in sub array
#foreach ...
}
编辑:总结下面给出的答案(感谢所有人):
use strict;
use warnings;
my @main_array = ();
my @sub_array1 = ( 1, 2, 3, 4, 5);
my @sub_array2 = ( "a", "b", "c", "d", "e" );
push @main_array, \@sub_array1;
push @main_array, \@sub_array2;
print "size of main_array is ",scalar(@main_array),"\n";
print "--------foreach ---------------------\n";
foreach my $sub_array (@main_array)
{
print "Sub array has ", scalar(@{$sub_array})," elements\n";
foreach my $value ( @{$sub_array})
{
print "value: ",$value,"\n";
}
}
print "--------------- for ----------------------- \n";
for (my $i = 0; $i < scalar(@main_array); $i++)
{
my $sub_array = $main_array[$i];
print "Sub array has ", scalar( @{$sub_array}), " elements\n";
for (my $j = 0; $j < scalar( @{$sub_array}); $j++)
{
print "value: ", $sub_array->[$j],"\n";
}
}
答案 0 :(得分:6)
my $sz = 0;
for my $outer (@main_array) {
for my $inner( @{ $outer } ) {
print $inner;
$sz++;
}
}
print "total number of all values held in main_array is $sz \n";
perllol和perldsc是这些问题的良好信息来源
对于调试use Data::Dumper; print Dumper(\@main_array)
很有用
希望这有帮助
答案 1 :(得分:3)
解决方案是传统的嵌套循环:
use warnings;
use strict;
my @sub_array1 = ( 1, 2, 3, 4, 5 );
my @sub_array2 = qw/ a b c d e /;
my @main_array = ( \@sub_array1, \@sub_array2 );
print "\@main_array has ", scalar @main_array, " elements.\n\n\n";
foreach my $outer ( @main_array ) {
print "Sub array has ", scalar @{$outer}, " elements:\t";
foreach my $inner ( @$outer ) {
print "($inner) ";
}
print "\n";
}
这将产生以下输出:
@main_array has 2 elements.
Sub array has 5 elements: (1) (2) (3) (4) (5)
Sub array has 5 elements: (a) (b) (c) (d) (e)
要直接访问各个元素,您可以说:
print $main_array[1][3], "\n";
...会产生“d
”。
或者在外部循环中你可以这样做:
for my $outer ( @main_array ) {
print join( ' ', $outer->[0], $outer->[1], $outer->[2], $outer->[3], $outer->[4] ), "\n";
# prints first five elements.
}
...但这有点愚蠢,因为它不像使用内循环那样灵活。