Ruby範圍
Ruby範圍表示一組具有開始和結束的值。 它們可以使用s..e
和s...e
文字或::new
構建。
其中..
的範圍包括起始值和結束值。而...
的範圍不包含起始值和結束值。
示例
#!/usr/bin/ruby
# file : range-example.rb
puts (-5..-1).to_a
puts '---------- 1 ------------'
puts (-5...-1).to_a
puts '---------- 2 ------------'
puts ('a'..'e').to_a
puts '---------- 3 ------------'
puts ('a'...'e').to_a
輸出結果如下 -
F:\worksp\ruby>ruby range-example.rb
-5
-4
-3
-2
-1
---------- 1 ------------
-5
-4
-3
-2
---------- 2 ------------
a
b
c
d
e
---------- 3 ------------
a
b
c
d
F:\worksp\ruby>
Ruby有多種方式來定義範圍。它們分別如下所示 -
- 範圍作爲序列
- 範圍作爲條件
- 範圍爲間隔
範圍作爲序列
定義範圍的最自然的方式是順序。它們有起點和終點。它們使用..
或...
運算符創建。
下面示例中將從0
到5
的採樣範圍。對此範圍進行操作,如下代碼所示:
#!/usr/bin/ruby
# file : range-sequences.rb
range = 0..5
puts range.include?(3)
ans = range.min
puts "Minimum value is #{ans}"
ans = range.max
puts "Maximum value is #{ans}"
ans = range.reject {|i| i < 5 }
puts "Rejected values are #{ans}"
range.each do |digit|
puts "In Loop #{digit}"
end
執行上面代碼,得到以下結果 -
F:\worksp\ruby>ruby range-sequences.rb
true
Minimum value is 0
Maximum value is 5
Rejected values are [5]
In Loop 0
In Loop 1
In Loop 2
In Loop 3
In Loop 4
In Loop 5
F:\worksp\ruby>
範圍作爲條件
範圍也定義爲條件表達式。在個行集合中定義了不同的條件。 這些條件都包含在開始語句和結束語句中。
示例:
#!/usr/bin/ruby
# file : range-conditions.rb
budget = 50000
watch = case budget
when 100..1000 then "Local"
when 1000..10000 then "Titan"
when 5000..30000 then "Fossil"
when 30000..100000 then "Rolex"
else "No stock"
end
puts watch
執行上面代碼,得到以下結果 -
F:\worksp\ruby>ruby range-conditions.rb
Rolex
F:\worksp\ruby>
範圍作爲間隔
範圍也可以用間隔來定義。 間隔由===
相等運算符表示。
示例:
#!/usr/bin/ruby
# file : range-intervals.rb
if (('a'..'z') === 'v')
puts "v lies in the above range"
end
if (('50'..'90') === 99)
puts "z lies in the above range"
end
執行上面代碼,得到以下結果 -
F:\worksp\ruby>ruby range-intervals.rb
v lies in the above range
F:\worksp\ruby>
Ruby反轉範圍
Ruby反轉(reverse)範圍運算符不返回任何值。 如果左側值大於一個範圍內的右側值,則不會有返回值。
示例:
#!/usr/bin/ruby
puts (5..1).to_a
上述示例的輸出中不會返回任何內容。
要打印範圍相反的順序,可以在正常範圍內使用reverse
方法,如下所示。
示例:
#!/usr/bin/ruby
# file : range-reverse.rb
puts (1..5).to_a.reverse
puts '----------------------'
puts ('a'...'e').to_a.reverse
執行上面代碼,得到以下結果 -
F:\worksp\ruby>ruby range-reverse.rb
5
4
3
2
1
----------------------
d
c
b
a
F:\worksp\ruby>