Ruby - Dãy

Phạm vi xảy ra ở khắp mọi nơi: tháng 1 đến tháng 12, 0 đến 9, dòng 50 đến 67, v.v. Ruby hỗ trợ phạm vi và cho phép chúng tôi sử dụng phạm vi theo nhiều cách khác nhau -

  • Phạm vi dưới dạng chuỗi
  • Phạm vi như điều kiện
  • Phạm vi dưới dạng khoảng thời gian

Phạm vi dưới dạng chuỗi

Việc đầu tiên và có lẽ là cách sử dụng tự nhiên nhất của phạm vi là biểu thị một chuỗi. Chuỗi có điểm bắt đầu, điểm kết thúc và cách tạo ra các giá trị liên tiếp trong chuỗi.

Ruby tạo các chuỗi này bằng cách sử dụng ''..''''...''toán tử phạm vi. Biểu mẫu hai chấm tạo ra một phạm vi bao gồm, trong khi biểu mẫu ba chấm tạo ra một phạm vi loại trừ giá trị cao được chỉ định.

(1..5)        #==> 1, 2, 3, 4, 5
(1...5)       #==> 1, 2, 3, 4
('a'..'d')    #==> 'a', 'b', 'c', 'd'

Chuỗi 1..100 được giữ như một đối tượng Phạm vi chứa các tham chiếu đến hai đối tượng Fixnum . Nếu cần, bạn có thể chuyển đổi một dải ô thành một danh sách bằng phương thức to_a . Hãy thử ví dụ sau:

#!/usr/bin/ruby

$, =", "   # Array value separator
range1 = (1..10).to_a
range2 = ('bar'..'bat').to_a

puts "#{range1}"
puts "#{range2}"

Điều này sẽ tạo ra kết quả sau:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
["bar", "bas", "bat"]

Phạm vi triển khai các phương pháp cho phép bạn lặp lại chúng và kiểm tra nội dung của chúng theo nhiều cách khác nhau -

#!/usr/bin/ruby

# Assume a range
digits = 0..9

puts digits.include?(5)
ret = digits.min
puts "Min value is #{ret}"

ret = digits.max
puts "Max value is #{ret}"

ret = digits.reject {|i| i < 5 }
puts "Rejected values are #{ret}"

digits.each do |digit|
   puts "In Loop #{digit}"
end

Điều này sẽ tạo ra kết quả sau:

true
Min value is 0
Max value is 9
Rejected values are 5, 6, 7, 8, 9
In Loop 0
In Loop 1
In Loop 2
In Loop 3
In Loop 4
In Loop 5
In Loop 6
In Loop 7
In Loop 8
In Loop 9

Phạm vi như điều kiện

Dải ô cũng có thể được sử dụng làm biểu thức điều kiện. Ví dụ: đoạn mã sau sẽ in ra các tập hợp các dòng từ đầu vào chuẩn, trong đó dòng đầu tiên trong mỗi tập hợp chứa từ bắt đầu và dòng cuối cùng của từ kết thúc :

while gets
   print if /start/../end/
end

Các dãy có thể được sử dụng trong các câu lệnh trường hợp -

#!/usr/bin/ruby

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

Điều này sẽ tạo ra kết quả sau:

Pass with Merit

Phạm vi dưới dạng khoảng thời gian

Việc sử dụng cuối cùng của phạm vi đa năng là như một bài kiểm tra khoảng thời gian: xem liệu một số giá trị có nằm trong khoảng thời gian được đại diện bởi phạm vi hay không. Điều này được thực hiện bằng cách sử dụng ===, toán tử bình đẳng trường hợp.

#!/usr/bin/ruby

if ((1..10) === 5)
   puts "5 lies in (1..10)"
end

if (('a'..'j') === 'c')
   puts "c lies in ('a'..'j')"
end

if (('a'..'j') === 'z')
   puts "z lies in ('a'..'j')"
end

Điều này sẽ tạo ra kết quả sau:

5 lies in (1..10)
c lies in ('a'..'j')