我目前正在将一个算法从Java移植到Julia,现在我遇到了一个部分,当满足某些条件时,我必须从内循环继续外部循环:
loopC: for(int x : Y){
for(int i: I){
if(some_condition(i)){
continue loopC;
}
}
}
我在GitHub上发现了一些关于这个主题的问题,但似乎只有关于它的讨论,还没有解决方案。有人知道如何在朱莉娅这样做吗?
答案 0 :(得分:5)
与其他一些语言一样,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 docs http://docs.julialang.org/en/release-0.5/manual/control-flow/
终止重复一段时间有时很方便 在测试条件被伪造之前或者在for循环中停止迭代之前 在到达可迭代对象的末尾之前。这可以 使用break关键字
完成
答案 1 :(得分:1)
如@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)