Ruby 的范圍
Ruby 的范圍(Ranges)允許以范圍的形式表示數(shù)據(jù)(換句話說,數(shù)據(jù)集具有開始和結(jié)束值以及介于兩者之間的值的邏輯順序)。范圍內(nèi)的值可以是數(shù)字,字符,字符串或?qū)ο?。在本章中,我們將研究Ruby 支持的三種范圍,即序列,條件和間隔。
1. 范圍作為序列
Ruby 中的序列范圍用于創(chuàng)建一系列連續(xù)值-由開始值,結(jié)束值和介于兩者之間的值范圍組成。
實(shí)例:
1..10 # 1 ~ 10 的序列
1...10 # 1 - 9 的序列
解釋:有兩個運(yùn)算符可用于創(chuàng)建此類范圍,包括兩個點(diǎn)(..
)的運(yùn)算符和三個點(diǎn)(...
)的運(yùn)算符,他們的區(qū)別是兩個點(diǎn)的運(yùn)算符包括范圍的第一個值和最后一個值,三個點(diǎn)的運(yùn)算符不包括最后一個值。
實(shí)例:
# 我們可以通過to_a方法將序列轉(zhuǎn)換成數(shù)組
> (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]
我們還可以創(chuàng)建一個基于字符的序列:
> ('a'..'l').to_a
=> ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l"]
2. 范圍的實(shí)例方法
鑒于 Ruby 的面向?qū)ο筇匦?,范圍?shí)際上也是一個對象。這樣,在使用范圍對象時,可以訪問 Range類的許多方法:
實(shí)例:
words = 'a'..'l'
a.class
=> Range
2.1 獲取范圍最小值
使用 min
方法:
words.min
=> "a"
2.2 獲取范圍最大值
使用 max
方法:
words.max
=> "l"
2.3 查看是否在范圍內(nèi)
使用 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. 范圍作為條件
范圍也可以用作條件表達(dá)式,一般和 case
一起使用。
實(shí)例:
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
# ---- 輸出結(jié)果 ----
Pass with Merit
4. 范圍作為間隔
范圍是識別值是否落在特定范圍內(nèi)的理想選擇。例如,我們可能想知道數(shù)字是在一定范圍內(nèi),還是某個字母組中的字母(按字母順序排列)。這是通過 ===
等于運(yùn)算符實(shí)現(xiàn)的。
實(shí)例:
# 判斷15是否在1~20之間
(1..20) === 15
=> true
# 判斷m是否在k~z字母之間
('k'..'z') === 'm'
=> true
5. 小結(jié)
本章節(jié)中,我們學(xué)習(xí)了范圍的概念、如何創(chuàng)建一個范圍,范圍的三種使用方法分別是序列、條件與間隔。并且了解了范圍的實(shí)例方法。