2016-09-30 40 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