루비 산맥


범위는 a~z, 0~9 등 어디에나 있습니다. Ruby는 범위를 지원하고 다양한 방식으로 범위를 사용할 수 있도록 해줍니다.

  • Range를 시퀀스로

  • Range를 조건으로

  • Range를 간격으로

Range를 시퀀스로

Range 첫 번째이자 가장 일반적인 용도는 시퀀스를 표현하는 것입니다. 시퀀스에는 시작점과 끝점이 있으며 시퀀스에서 연속적인 값을 생성하는 방식이 있습니다.

Ruby는 ''..''''...'' 범위 연산자를 사용하여 이러한 시퀀스를 만듭니다. 2점 형식은 지정된 최고 값을 포함하는 범위를 생성하고, 3점 형식은 지정된 최고 값을 포함하지 않는 범위를 생성합니다.

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

시퀀스 1..100은 두 개의 Fixnum 개체에 대한 참조를 포함하는 Range 개체입니다. 필요한 경우 to_a 메서드를 사용하여 범위를 목록으로 변환할 수 있습니다. 다음 예를 시도해 보십시오.

#!/usr/bin/ruby

$, =", "   # Array 值分隔符
range1 = (1..10).to_a
range2 = ('bar'..'bat').to_a

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


위 예의 출력은 다음과 같습니다.

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

Ranges는 이를 반복할 수 있는 메서드를 구현하고 다양한 방법으로 내용을 검사할 수 있습니다.

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-

# 指定范围
digits = 0..9

puts digits.include?(5)
ret = digits.min
puts "最小值为 #{ret}"

ret = digits.max
puts "最大值为 #{ret}"

ret = digits.reject {|i| i < 5 }
puts "不符合条件的有 #{ret}"

digits.each do |digit|
   puts "在循环中 #{digit}"
end


위에서 실행 중인 인스턴스의 출력 결과는 다음과 같습니다.

true
最小值为 0
最大值为 9
不符合条件的有 [5, 6, 7, 8, 9]
在循环中 0
在循环中 1
在循环中 2
在循环中 3
在循环中 4
在循环中 5
在循环中 6
在循环中 7
在循环中 8
在循环中 9

조건의 범위로

범위는 조건식으로도 사용할 수 있습니다. 예를 들어, 다음 코드 조각은 각 세트의 첫 번째 줄에 start라는 단어가 포함되고 마지막 줄에 end.라는 단어가 포함된 표준 입력의 줄을 인쇄합니다.

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

범위는 Case 문에서 사용할 수 있습니다.

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-

score = 70

result = case score
when 0..40
	"糟糕的分数"
when 41..60
	"快要及格"
when 61..70
	"及格分数"
when 71..100
   	"良好分数"
else
	"错误的分数"
end

puts result


위 예제의 출력 결과는 다음과 같습니다.

及格分数

간격의 범위로

범위의 마지막 용도는 간격 감지: 지정된 값이 지정된 범위 내에 있는지 확인하는 것입니다. 계산을 완료하려면 === 같음 연산자가 필요합니다.

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-

if ((1..10) === 5)
  puts "5 在 (1..10)"
end

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

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


위 예제의 출력 결과는 다음과 같습니다.

5 在 (1..10)
c 在 ('a'..'j')