我有两个数组,我正在计算一个数组和另一个数组的值。我所做的是
@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。
发布于 2012-01-10 21:08:09
下面是带有标签的循环,这样您就可以切换到外层:
XVALUE:
foreach $x (@array_x){
YVALUE:
foreach $y (@array_y){
if ($x-$y > 0){
next XVALUE;
}
print "$x\n";
}
}发布于 2012-01-10 18:39:51
您可以标记每个循环并退出您想要的循环。请参阅perldoc last
例如:
LINE: while (<STDIN>) {
last LINE if /^$/; # exit when done with header
#...
}发布于 2012-01-10 20:39:26
如果只想找到大于后续列表中元素的元素,下面的代码将在每个数组的1次迭代中找到它。
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;
}输出:
X=5
X=6https://stackoverflow.com/questions/8801591
复制相似问题