1. 程式人生 > Ruby 程式語言入門 >17 Ruby 的範圍

17 Ruby 的範圍

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. 小結

本章節中,我們學習了範圍的概念、如何建立一個範圍,範圍的三種使用方法分別是序列、條件與間隔。並且瞭解了範圍的例項方法。