【问题标题】:Julia - Continue outer loopJulia - 继续外循环
【发布时间】:2019-06-24 05:11:44
【问题描述】:

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

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

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

【问题讨论】:

    标签: julia nested-loops


    【解决方案1】:

    在其他一些语言中,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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多