17 Ruby 的範圍
阿新 • • 發佈:2020-06-25
Ruby 的範圍(Ranges)允許以範圍的形式表示資料(換句話說,資料集具有開始和結束值以及介於兩者之間的值的邏輯順序)。範圍內的值可以是數字,字元,字串或物件。在本章中,我們將研究Ruby 支援的三種範圍,即序列,條件和間隔。
1. 範圍作為序列
Ruby 中的序列範圍用於建立一系列連續值-由開始值,結束值和介於兩者之間的值範圍組成。
例項:
1..10 # 1 ~ 10 的序列
1...10 # 1 - 9 的序列
解釋:有兩個運算子可用於建立此類範圍,包括兩個點(..
)的運算子和三個點(...
)的運算子,他們的區別是兩個點的運算子包括範圍的第一個值和最後一個值,三個點的運算子不包括最後一個值
例項:
# 我們可以通過to_a方法將序列轉換成陣列
> (1..10).to_a
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
> (1...10).to_a
=> [1, 2, 3, 4, 5, 6, 7, 8, 9]
我們還可以建立一個基於字元的序列:
> ('a'..'l').to_a
=> ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l"]
2. 範圍的例項方法
鑑於 Ruby 的面向物件特性,範圍實際上也是一個物件。這樣,在使用範圍物件時,可以訪問 Range類的許多方法:
例項:
words = 'a'..'l'
a.class
=> Range
2.1 獲取範圍最小值
使用 min
方法:
words.min
=> "a"
2.2 獲取範圍最大值
使用 max
方法:
words.max
=> "l"
2.3 檢視是否在範圍內
使用 include?
方法:
words.include?('b')
=> true
2.4 過濾不符合範圍的值
使用 reject
並在 block 中傳遞條件:
words.reject {|subrange| subrange < 'f'}
=> [ "f", "g", "h", "i", "j", "k", "l"]
2.5 遍歷範圍
使用 each
迭代器:
words.each {|word| puts "Hello " + word}
Hello a
Hello b
Hello c
Hello d
Hello e
Hello f
Hello g
Hello h
Hello i
Hello j
Hello k
Hello l
=> "a".."l"
3. 範圍作為條件
範圍也可以用作條件表示式,一般和 case
一起使用。
例項:
score = 70
result = case score
when 0..40 then "Fail"
when 41..60 then "Pass"
when 61..70 then "Pass with Merit"
when 71..100 then "Pass with Distinction"
else "Invalid Score"
end
puts result
# ---- 輸出結果 ----
Pass with Merit
4. 範圍作為間隔
範圍是識別值是否落在特定範圍內的理想選擇。例如,我們可能想知道數字是在一定範圍內,還是某個字母組中的字母(按字母順序排列)。這是通過 ===
等於運算子實現的。
例項:
# 判斷15是否在1~20之間
(1..20) === 15
=> true
# 判斷m是否在k~z字母之間
('k'..'z') === 'm'
=> true
5. 小結
本章節中,我們學習了範圍的概念、如何建立一個範圍,範圍的三種使用方法分別是序列、條件與間隔。並且瞭解了範圍的例項方法。