首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >交替循环嵌套的foreach循环

交替循环嵌套的foreach循环
EN

Stack Overflow用户
提问于 2018-06-07 04:47:58
回答 2查看 346关注 0票数 1

我正在尝试打印一个foreach循环中的值。然后转到另一个foreach循环,直到两个数组中的最后一个元素。

代码语言:javascript
复制
@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循环返回相同的值。

代码语言:javascript
复制
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

期望的输出应如下所示:

代码语言:javascript
复制
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逻辑打开所有这些文件。

脚本将如下所示:

代码语言:javascript
复制
$dir1 = "/tmp/*";
$dir2 = "/home/*";
@files1 = glob( $dir1 );
@files2 = glob( $dir2 );
foreach (@files1) {
 .
 .
 . 
   foreach (@files2){
    .
    .
    .
   }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-07 06:06:47

您正在从List::MoreUtils描述each_array的行为

代码语言:javascript
复制
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";
}

输出:

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2018-06-07 05:23:03

循环遍历任一数组的索引

代码语言:javascript
复制
foreach my $i (0..$#list) {
    say "value of a: ", $list[$i]  // 'undef';  #/
    say "value of b: ", $list1[$i] // 'undef';
}

在哪里需要defined-or (//),否则您将收到未定义元素的警告(或者如果第二个数组在第一个数组之前耗尽)。我打印字符串undef,根据需要进行调整。

这显然假设并行处理数组是有意义的,因此它们具有相同的大小。如果它们不是,你可能想要做一些其他的事情,而不是在一个结束后继续。

您的代码在第一次使用next迭代后退出内部循环,下一次返回时将从头开始。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50729354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档