如何在Julia中打破嵌套的for循环

zyc*_*zyc 10 nested-loops julia

我试图以一种非常无效的方式打破嵌套循环:

BreakingPoint = false
a=["R1","R2","R3"]
b=["R2","R3","R4"]
for i in a
  for j in b
    if i == j
      BreakingPoint = true
      println("i = $i, j = $j.")
    end
    if BreakingPoint == true; break; end
  end
  if BreakingPoint == true; break; end
end
Run Code Online (Sandbox Code Playgroud)

有更简单的方法吗?在我的实际问题,我没有什么是数组的想法ab,除了他们是ASCIIString秒.数组名称(a以及b示例代码)也是通过元编程方法自动生成的.

ise*_*arn 14

你可以做两件事之一

在多外环中有循环语句(如果那就是它所调用的)

for i in a, j in b
    if i == j
        break
    end 
end 
Run Code Online (Sandbox Code Playgroud)

这是干净的,但并非总是可行

我会被钉在十字架上,但是你可以使用@goto和@label

for i in a
    for j in b
        if i == j
            @goto escape_label
        end
    end
end

@label escape_label
Run Code Online (Sandbox Code Playgroud)

如果您使用@ goto/@标签方式,为了维护/审查代码的人,请正确记录您的使用情况,因为带标签的导航代码令人叹为观止

有关多循环中断的讨论,请参阅此内容

  • 对于标签而言,没有什么比命名的"break"或随机布尔值更难以理解.只要它没有被滥用,"@ goto"和"@ label"就有一个毫无根据的负面声誉.一些程序员到目前为止,以避免他们,他们最终使代码更不可读,因为他们用布尔汤替换`@ goto` (4认同)
  • 我同意你的观点,我喜欢使用标签,很少使用布尔锁,因为它们感觉很笨拙 (2认同)

Car*_*ate 10

将2D循环放入函数中,并在需要时尽早return完成break.