2016-09-30 75 views
8
循环

我曾尝试在一个相当无效的方式打破了嵌套的循环:如何摆脱嵌套在朱莉娅

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 

是否有更简单的方法呢?在我的实际问题中,我不知道什么是阵列ab,除了它们是ASCIIString s。阵列名称(示例代码中的ab)也是通过元编程方法自动生成的。

回答

9

你可以做两件事情

一个具有循环语句(如果多数民众赞成其所谓的)在多外环

for i in a, j in b 
    if i == j 
     break 
    end 
end 

这是干净的,但并不总是能够

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

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

@label escape_label 

如果您使用@ goto/@标签方式,为了维护/检查代码的人员,请正确记录您的使用情况,因为使用标签导航代码令人惊叹地烦人

有关多循环中断的讨论,请参见this

+3

对于标签,除了命名为'break'或随机布尔值之外,其实没有什么更难读的。只要它没有被滥用,'@ goto'和'@ label'就会有不必要的负面声望。一些程序员到目前为止避免他们,他们最终使代码更不可读,因为他们用布尔汤代替'@ goto' –

+1

我分享你的意见,我喜欢使用标签,并且很少使用布尔锁,因为他们觉得笨拙 – isebarn

9

将2D循环放入一个函数中,并且当您想要break时尽早执行return