想到什麼就寫什麼~依序就來篇迴圈與迭代吧!
如果你問什麼是迴圈?解釋大概就是說,在一段程式中利用了短短幾行程式碼,但卻能夠連續執行多次重複動作。執行次數會依照程式碼設立的條件成立時才結束迴圈,或者是針對集合中的所有項目統一處理。而迴圈是程式設計佔有非常重要的部份。
依序介紹以下迴圈:
while和until皆是需要設定條件的迴圈,如果沒有條件設定,或是設定不當的話,不小心會變成「無限迴圈」。
counter = 1
while counter < 5
counter += 1
puts counter
end
# 輸出結果:
# 2
# 3
# 4
# 5
counter = 1
until counter > 5
counter += 1
puts counter
end
# 輸出結果:
# 1
# 2
# 3
# 4
# 5
它不像while或until迴圈事先宣告停止條件,它會重複執行loop的內容,直到迴圈break if
條件設定才會停止,如果忘記加上break會變成「無限迴圈」。
a = 5
loop do
a -= 1
puts "#{a}"
break if a <= 0
end
# 輸出結果:
# 0
# 1
# 2
# 3
# 4
在下列迴圈中使用next if
,意思是如果符合這個條件,就進入下一段繼續執行
a = 10
loop do
a -= 1
next if a % 2 == 1
print "#{a}"
break if a <= 0
end
限制次數迴圈,但在Ruby迴圈不常使用,通常都是用each方法居多。
for i in 0..3
puts "hey #{i}"
end
# 輸出結果:
# hey 1
# hey 2
# hey 3
----------------------------
students = ["Aimee", "Nina", "Sarah"]
for s in students
puts s
end
# 輸出結果:
# Aimee
# Nina
# Sarah
times方法可以指定要跑幾次的迴圈,upto跟downto方法,則是可以正向或反向的執行迴圈。
3.times do
puts "hi, apple"
end
# 輸出結果:
# hi, apple
# hi, apple
# hi, apple
1.upto(3) do |x|
puts "hi, apple #{x}"
end
# 輸出結果:
# hi, apple 1
# hi, apple 2
# hi, apple 3
3.downto(1) do |x|
puts "hi, apple #{x}"
end
# 輸出結果:
# hi, apple 3
# hi, apple 2
# hi, apple 1
each應該是最常使用的一種方法,通常在ruby處理陣列跟雜湊的時候都會用到。
上述說到在Ruby迴圈不常使用for迴圈,通常都是使用each方法,就拿for迴圈的例子來看,會發現得到相同得結果。
students = ["Aimee", "Nina", "Sarah"]
students.each do |s|
puts s
end
# 輸出結果:
# Aimee
# Nina
# Sarah
如果Array換成Hash
hash = {girl: "doll", boy: "car"}
hash.each do |key, value|
puts "gender: #{key}, toy: #{value}"
end
# 輸出結果:
# gender: girl, toy: doll
# gender: boy, toy: car
-----------------------------------
# 也可以單取key跟value
hash.each_key do |key|
puts key
end
hash.each_value do |value|
puts value
end
參考連結:
變數、常數、流程控制、迴圈
[Ruby] 迴圈及疊代(Loop and Iterator)