我目前正在将算法从 Java 移植到 Julia,现在我遇到了一个部分,当满足某些条件时,我必须从内循环继续外循环:
loopC: for(int x : Y){
for(int i: I){
if(some_condition(i)){
continue loopC;
}
}
}
我在 GitHub 上发现了一些关于这个主题的问题,但似乎只有关于它的讨论,还没有解决方案。有人知道如何在 Julia 中实现这一点吗?
与其他一些语言一样,Julia 使用
break
来表示:
for i in 1:4
for j in 1:4
if j == 2
break
end
end
end
每当 j 为 2 时就跳出内循环
但是,如果您需要退出外循环,您可以像这样使用 @goto 和 @label
for i in 1:4
for j in 1:4
if (j-i) == 2
@goto label1
end
if j == 2
@goto label2
end
do stuff
end
@label label2
end
@label label1
直接来自 julia 文档 http://docs.julialang.org/en/release-0.5/manual/control-flow/
有时终止一段时间的重复是很方便的 在测试条件被伪造或停止在 for 循环中迭代之前 在到达可迭代对象的末尾之前。这可以是 使用break关键字完成
正如@isebarn提到的,
break
可用于退出内循环:
for i in 1:3
for j in 1:3
if j == 2
break # continues with next i
end
@show (i,j)
end # next j
end # next i
(i, j) = (1, 1)
(i, j) = (2, 1)
(i, j) = (3, 1)
但是,需要注意一些,因为
break
的行为取决于嵌套循环的指定方式:
for i in 1:3, j in 1:3
if j == 2
break # exits both loops
end
@show (i,j)
end # next i,j
(i, j) = (1, 1)
参见 https://en.wikibooks.org/wiki/Introducing_Julia/Controlling_the_flow#Nested_loops
尽管很麻烦,也可以从包含内部循环的嵌套函数中实现
return
:
for i in 1:3
(i -> for j in 1:3
if j == 2
return
end
@show (i,j)
end)(i)
end
(i, j) = (1, 1)
(i, j) = (2, 1)
(i, j) = (3, 1)
这可以使用标志来实现:
for i in 1:3
flag = false
for j in 1:3
if j == 2 # some condition
flag = true
break
end
end
if flag
continue
end
#...
end