반응형
변수가 범위 내에 있는지 확인?
다음과 같은 루프를 작성해야합니다.
if i (1..10)
do thing 1
elsif i (11..20)
do thing 2
elsif i (21..30)
do thing 3
etc...
그러나 지금까지 구문 측면에서 잘못된 길을 갔다.
만약 사이에 있다면? (1, 10) 일을 1 elsif i.between? (11,20) 일을 2 ...
===
연산자 (또는 그 동의어 include?
)를 사용하십시오.
if (1..10) === i
@Baldu가 말했듯이 === 연산자를 사용하거나 내부적으로 ===를 사용하는 유스 케이스 / 사용 :
case i
when 1..10
# do thing 1
when 11..20
# do thing 2
when 21..30
# do thing 3
etc...
여전히 범위를 사용하려면 ...
def foo(x)
if (1..10).include?(x)
puts "1 to 10"
elsif (11..20).include?(x)
puts "11 to 20"
end
end
일반적으로 다음과 같은 기능으로 훨씬 더 나은 성능을 얻을 수 있습니다.
if i >= 21
# do thing 3
elsif i >= 11
# do thing 2
elsif i >= 1
# do thing 1
당신은 사용할 수 있습니다
if (1..10).cover? i then thing_1 elsif (11..20).cover? i then thing_2
과에 따라이 벤치 마크 빠른 루비 보다 더 빨리이다include?
질문에 대한 직접적인 대답은 아니지만 "내부"와 반대되는 것을 원할 경우 :
(2..5).exclude?(7)
진실
루비로 빌드 할 수있는보다 역동적 인 답변 :
def select_f_from(collection, point)
collection.each do |cutoff, f|
if point <= cutoff
return f
end
end
return nil
end
def foo(x)
collection = [ [ 0, nil ],
[ 10, lambda { puts "doing thing 1"} ],
[ 20, lambda { puts "doing thing 2"} ],
[ 30, lambda { puts "doing thing 3"} ],
[ 40, nil ] ]
f = select_f_from(collection, x)
f.call if f
end
따라서이 경우 "범위"는 경계 조건을 포착하기 위해 실제로는 0으로 묶여 있습니다.
문자열의 경우 :
(["GRACE", "WEEKLY", "DAILY5"]).include?("GRACE")
#=>true
참고URL : https://stackoverflow.com/questions/870507/determining-if-a-variable-is-within-range
반응형
'programing tip' 카테고리의 다른 글
날짜별로 ArrayList의 객체를 정렬 하시겠습니까? (0) | 2020.06.30 |
---|---|
EditText의 포커스를 처리하는 이벤트 (0) | 2020.06.30 |
SQLAlchemy 기본 DateTime (0) | 2020.06.30 |
Android : android.content.res.Resources $ NotFoundException : 문자열 리소스 ID # 0x5 (0) | 2020.06.30 |
jQuery를 사용하여 자식 요소를 부모에서 다른 부모 요소로 옮기는 방법 (0) | 2020.06.30 |