Julia - 继续外循环

问题描述 投票:0回答:3

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

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

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

julia nested-loops
3个回答
6
投票

与其他一些语言一样,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关键字完成


2
投票

正如@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)

0
投票

这可以使用标志来实现:

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  
© www.soinside.com 2019 - 2024. All rights reserved.