Perl中如何将数组推入另一数组并提取外层数组的各元素
1 将数组推入另一个数组的正确操作
根据你要实现的效果,分两种场景处理:
- 场景1:仅需把内层数组的所有元素逐个追加到外层数组末尾,最终外层为一维数组
你示例中的push(@f, @e)写法完全正确。执行后@e的元素会被展开,依次追加到@f的末尾。以你给出的循环逻辑为例,最终@f会是包含82个元素的一维数组,结构为(2,3,4,5,...,42,43)。 - 场景2:需要把内层数组作为独立整体存入外层数组,最终形成二维嵌套数组(也就是你注释中提到的多数组控制场景)
因为Perl的push默认会展开传入的数组,直接写push(@f, @e)无法得到嵌套结构,需要传入内层数组的引用,写法有两种:push(@f, \@e):取现有@e的内存引用,如果后续修改@e的内容,@f中对应的元素也会同步变化push(@f, [@e]):新建匿名数组拷贝@e的内容,后续@e的修改不会影响@f中已存入的内容
调整后的示例代码如下:
调整后@f是包含41个元素的数组,每个元素都是一个存了2个数值的数组引用。my @f; for my $i (0..40) { my @e = ($i += 2, $i + 1); push(@f, [@e]); # 存入匿名数组引用,得到二维嵌套结构 }
2 从外层数组逐一获取元素的操作
对应上面两种存储场景,读取方式也不一样:
- 对应场景1(外层为一维数组)
直接遍历外层数组即可拿到所有元素:# 逐个打印所有元素 for my $elem (@f) { print $elem."\n"; } - 对应场景2(外层为二维嵌套数组)
需要先拿到内层数组的引用,再解引用读取元素,两种常用写法:- 嵌套遍历读取所有元素
for my $inner_arr (@f) { # @$inner_arr 解引用得到完整的内层数组 for my $elem (@$inner_arr) { print $elem."\n"; } # 也可以直接通过下标读取内层指定位置元素,比如读取第一个元素:$inner_arr->[0] } - 按下标精准读取
# $#f 是外层数组的最大下标 for my $outer_idx (0..$#f) { # 读取当前内层数组的第一个元素 print $f[$outer_idx][0]."\n"; # 读取当前内层数组的第二个元素 print $f[$outer_idx][1]."\n"; }
- 嵌套遍历读取所有元素
内容的提问来源于stack exchange,提问作者user17503744
相关产品推荐
相关产品推荐

