跳至主要内容

[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

參考資料