Ruby範圍


Ruby範圍表示一組具有開始和結束的值。 它們可以使用s..es...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有多種方式來定義範圍。它們分別如下所示 -

  • 範圍作為序列
  • 範圍作為條件
  • 範圍為間隔

範圍作為序列

定義範圍的最自然的方式是順序。它們有起點和終點。它們使用.....運算子建立。
下面範例中將從05的取樣範圍。對此範圍進行操作,如下程式碼所示:

#!/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>