首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >走出循环Perl

走出循环Perl
EN

Stack Overflow用户
提问于 2012-01-10 18:15:22
回答 6查看 221关注 0票数 3

我有两个数组,我正在计算一个数组和另一个数组的值。我所做的是

代码语言:javascript
复制
@array_x= qw(1 5 3 4 6);
@array_y= qw(-3 4 2 1 3);

foreach $x (@array_x){
    foreach $y (@array_y){
        if ($x-$y > 0){
            next;
        }
        print "$x\n";
    }
}

在这里,问题是,在array_x中,它的第一个索引,即1-(-3)=4,它满足了,但是下一个1-4=-3不满足条件,因此它应该打破循环,转到array_x的下一个元素。在这里,只有5和6满足array_y的所有元素的条件,所以我在输出中应该只得到5,6。

EN

回答 6

Stack Overflow用户

发布于 2012-01-10 21:08:09

下面是带有标签的循环,这样您就可以切换到外层:

代码语言:javascript
复制
XVALUE:
foreach $x (@array_x){
    YVALUE:
    foreach $y (@array_y){
        if ($x-$y > 0){
            next XVALUE;
        }
        print "$x\n";
    }
}
票数 4
EN

Stack Overflow用户

发布于 2012-01-10 18:39:51

您可以标记每个循环并退出您想要的循环。请参阅perldoc last

例如:

代码语言:javascript
复制
LINE: while (<STDIN>) {
    last LINE if /^$/; # exit when done with header
    #...
}
票数 3
EN

Stack Overflow用户

发布于 2012-01-10 20:39:26

如果只想找到大于后续列表中元素的元素,下面的代码将在每个数组的1次迭代中找到它。

代码语言:javascript
复制
use strict;

my @array_x= qw(1 5 3 4 6);    
my @array_y= qw(-3 4 2 1 3);    
my $max_y = $array_y[0];

foreach my $y (@array_y) {    
   $max_y = $y if $y > $max_y;    
}

foreach my $x (@array_x) {    
   print "\nX=$x" if $x > $max_y;
}

输出:

代码语言:javascript
复制
X=5 
X=6
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8801591

复制
相关文章

相似问题

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