Rubyのeach, for, whileなどの繰り返し処理の外にbreakできない時の対処法

  • このエントリーをはてなブックマークに追加

Rubyで二重でeach,forなどの繰り返し処理をしてbreakで抜けようとすると

外に抜けれない状態になります。

その時の対処方法について。

 

まずは、二重でeachを使った時の処理結果は以下の通りです。

areas = ['東京','埼玉','千葉','茨城']
nums = [1,2,3,4]

areas.each do |area|
    nums.shuffle.each do |num|
        # area文字列, 3 になったらbreak
        puts "#{area}, #{num}"
        break if num == 3
    end
end
# 結果
# 東京, 2
# 東京, 1
# 東京, 3 <- ここ
# 埼玉, 2
# 埼玉, 1
# 埼玉, 3 <- ここ
# 千葉, 4
# 千葉, 1
# 千葉, 3 <- ここ
# 茨城, 1
# 茨城, 3 <- ここ

3のときに次のareasに移って処理を繰り返していますね。

これを1回目の3で処理を終わらせたい場合は
catch :XXXX(適当な名前) と throw :XXXX(適当な名前)を使いましょう!

catch :done do
    areas.each do |area|
        nums.shuffle.each do |num|
            puts "#{area}, #{num}"
            if num == 3
                throw :done
            end
        end
    end
end
# 結果
# 東京, 1
# 東京, 4
# 東京, 3

注意点は、catchとthrowのあとに付ける名前は一致させることです。

違うとエラーになるので注意しましょう。

 

繰り返し処理を一気に全部抜けたいんだ!という方はぜひ参考にしてみてください(*^^*)

  • このエントリーをはてなブックマークに追加

コメントを残す

*