perl - 交替循环嵌套 foreach 循环
问题描述
我正在尝试从一个 foreach 循环中打印一个值。然后转到另一个 foreach 循环并继续直到两个数组中的最后一个元素。
@list = (10, 20, 30, 40, 50);
@list1 = (15, 25, 35, 45, 55);
OUTER:foreach $a (@list) {
print "value of a: $a\n";
foreach $b (@list1) {
print "value of b: $b\n";
next OUTER;
}
}
这会从第二个 foreach 循环返回相同的值。
value of a: 10
value of b: 15
value of a: 20
value of b: 15
value of a: 30
value of b: 15
value of a: 40
value of b: 15
value of a: 50
value of b: 15
所需的输出应如下所示:
value of a: 10
value of b: 15
value of a: 20
value of b: 25
value of a: 30
value of b: 35
value of a: 40
value of b: 45
value of a: 50
value of b: 55
有没有办法可以交替打印两个数组中的值?任何循环控制语句都可以做到这一点?
我只是在测试这个逻辑,因为我将在我的脚本中使用它。在哪里,我将从 foreach 循环中打开一对文件并对其进行处理(每个循环一个文件)。我将使用 foreach 循环打开的文件位于不同的目录中,并且位于几个类似文件的池中。我将在我的代码中循环以使用嵌套的 foreach 逻辑打开所有这些。
脚本看起来像这样:
$dir1 = "/tmp/*";
$dir2 = "/home/*";
@files1 = glob( $dir1 );
@files2 = glob( $dir2 );
foreach (@files1) {
.
.
.
foreach (@files2){
.
.
.
}
}
解决方案
循环遍历任一数组的索引
foreach my $i (0..$#list) {
say "value of a: ", $list[$i] // 'undef'; #/
say "value of b: ", $list1[$i] // 'undef';
}
需要
定义或
( //
) 的地方,否则您将收到未定义元素的警告(或者如果第二个数组在第一个数组之前耗尽)。我打印字符串undef
,根据需要进行调整。
这清楚地假设并行处理数组是有意义的,因此它们的大小相同。如果他们不是,你可能想做一些事情,而不是在结束后继续。
您的代码在第一次迭代后退出内部循环next
,并在下一次返回它时从头开始。
推荐阅读
- reactjs - 试图保持我的反应状态并在渲染时获得无限循环
- python - 如何在 Python 中仅使用 VS Code 自动完成名称?
- reactjs - 如何使用现有索引创建 Elastic App Search Engine(来自 GraphDB Elastic Search Connector 的数据)
- javafx - 在窗格上拖动时防止重叠形状
- web-scraping - 无法对网站进行身份验证,Scrapy Spider,错误请求
- terraform - 如何从 terraform-sdk-go 为 resource.StateChangeConf 设置超时?
- regex - 正则表达式匹配组前的最后一场比赛
- r - PCA 的参数类型无效
- java - 尝试使用异步标志创建集合时出现 401 Unauthorized HTTP 错误
- python - Python 单行 For 循环与 If:请解释一下?