交替循环嵌套的foreach循环
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了交替循环嵌套的foreach循环相关的知识,希望对你有一定的参考价值。
我试图从一个foreach循环打印一个值。然后转到另一个foreach循环并继续直到两个数组中的最后一个元素。
@list = (10, 20, 30, 40, 50);
@list1 = (15, 25, 35, 45, 55);
OUTER:foreach $a (@list) {
print "value of a: $a
";
foreach $b (@list1) {
print "value of b: $b
";
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){
.
.
.
}
}
答案
您正在描述each_array
中List::MoreUtils的行为:
use strict;
use warnings;
use 5.010;
use List::MoreUtils qw(each_array);
my @arr1 = (10, 20, 30, 40, 50);
my @arr2 = (15, 25, 35, 45, 55);
my $it = each_array(@arr1, @arr2);
while (my ($a1, $a2) = $it->()) {
say "value from array 1: $a1";
say "value from array 2: $a2";
}
输出:
value from array 1: 10
value from array 2: 15
value from array 1: 20
value from array 2: 25
value from array 1: 30
value from array 2: 35
value from array 1: 40
value from array 2: 45
value from array 1: 50
value from array 2: 55
另一答案
循环遍历任一数组的索引
foreach my $i (0..$#list) {
say "value of a: ", $list[$i] // 'undef'; #/
say "value of b: ", $list1[$i] // 'undef';
}
需要defined-or(//
)或者你会得到未定义元素的警告(或者如果第二个数组在第一个数组之前耗尽)。我打印字符串undef
,调整为合适。
这清楚地假设,并行处理数组是有意义的,因此它们具有相同的大小。如果他们不是,你可能想要做一些事情,而不是一次结束。
在使用next
进行第一次迭代后,您的代码将退出内部循环,下次返回时,它将从头开始。
以上是关于交替循环嵌套的foreach循环的主要内容,如果未能解决你的问题,请参考以下文章
如何打破嵌套的foreach循环然后转到c#上的父foreach循环