[Ruby] 迴圈及疊代(Loop and Iterator)
迴圈(Loop)
while
while 後面 do 可省略
counter = 1
while counter < 11 do
puts counter
counter += 1
end
until
until 後面 do 可省略
counter = 1
until counter > 10 do
puts counter
# Add code to update 'counter' here!
counter += 1
end
times: 限制執行次數(建議使用)
使用 Number.times {...}
來重複執行多次迴圈,類似 for...in
:
10.times do |item|
print 'cool'
end
for...in: 限制執行次數(不建議使用)
在 Ruby 中大部分不會去用 for loop
,而是用 each
來做疊代,這是因為 for loop 的變數會存在於 for 迴圈外,但其他的 iterators 並不會。
Range Operator:
...
:1...10
表示 從 1 開始但++不包括++ 10。..
:1..10
表示從 1 開始且++包括++ 10。
for num in 1...10
puts num
end
puts num # 變數會存在 for 迴圈外
loop: 不限制執行次數,直到遇到 break
重複一直執行 loop 裡面的內容,直到 break
才停止:
i = 20
loop do
i -= 1
puts "#{i}"
break if i <= 0
end
next if, break if
我們可以在迴圈中使用 next if
,意思是如果符合這個條件的就,就幫我ㄊ這次迴圈,從下一次繼續執行(要注意在 next if
前的內容依然會執行到):
i = 20
loop do
i -= 1
next if i % 2 == 1
print "#{i}"
break if i <= 0
end
upto, downto
######################################
# upto & downto #
######################################
# upto
1.upto(5) do |i|
puts "hi, ruby #{i}"
end
"L".upto("P"){|character| puts character}
# downto
5.downto(1) do |i|
puts "hi, ruby #{i}"
end
疊代(Iterator)
在 Ruby 中,大括號({ }
) 和 do ... end
是可以交替使用的,前者通常用在單行的程式碼,後者用在多行的程式碼區塊。
陣列的疊代(Array.each)
#################################
# 陣列的疊代 #
#################################
arr = [1,2,3,4,5]
# Use While
i = 0
while i < arr.length
puts arr[i]
i += 1
end
# Use Each
arr = [1,2,3,4,5]
arr.each do |item|
puts item += 2
end
arr.each { |item| puts item += 2 }
Hash 的疊代
##################################
# Hash 的疊代 #
##################################
hash = {apple: "pen", pen: "pineapple"}
# 疊代 key 和 value
hash.each do |key, value|
puts "Key: #{key}, Value: #{value}"
end
# 疊代 key
hash.each_key do |key|
puts key
end
# 疊代 value
hash.each_value do |value|
puts value
end