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

はそれを行うための簡単な方法はありますか?私の実際の問題では、配列とbに何があるのか​​分からず、ASCIIStringです。サンプルコードの配列名(aおよびb)も、メタプログラミングの方法によって自動的に生成されます。

答えて

9

あなたは二つのこと

マルチ外側のループで(その呼んだものthatsの場合)ループ文を持って

きれいです
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を実行します。

関連する問題