朱莉娅 - 继续外循环

时间:2016-11-07 15:39:30

标签: julia nested-loops

我目前正在将一个算法从Java移植到Julia,现在我遇到了一个部分,当满足某些条件时,我必须从内循环继续外部循环:

 loopC: for(int x : Y){
            for(int i: I){
                if(some_condition(i)){
                    continue loopC;
                }                   
            }
        }

我在GitHub上发现了一些关于这个主题的问题,但似乎只有关于它的讨论,还没有解决方案。有人知道如何在朱莉娅这样做吗?

2 个答案:

答案 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)