2009-02-21 2 views
10

Groovy에서 정수 범위와 0.5 단계를 지정하는 가장 멋진 방법은 무엇입니까? 예 : 1, 1.5, 2, 2.5, 3, 3.5, 4Groovy 범위와 0.5 단계 크기

편집 : 수정 : 최종 결과로서 Grails 제약 조건에 사용할 범위 개체가 필요합니다 나는 목록도 괜찮을 것이라고 생각하지만.

+0

생각할 수있는 최선입니다 02/07/making-a-groovy-class-a-range /)? –

답변

28

내가 볼 수있는 가장 좋은 방법은 step 명령을 사용하는 것입니다.


    1.step(4, 0.5){ print "$it "} 

은 인쇄 것이다 : "1 1.5 2.0 2.5 3.0 3.5"

+0

+1 이것이 최고의 대답 인 것 같습니다 –

2

김은, 위의 빌드합니다. 값 발은 범위 1..N이 아니라 반 값이면 테스트하려면 다음

같은
def range = 2..(n*2).collect { return it/2.0 } 
return range.contains(val) 

뭔가가 작동,하지만 내가 원하는만큼 꽤 아니지만, 그것은 당신이를 구축 할 수 있습니다 한 번 범위를 지정하고 필요한 경우 여러 번 사용하십시오.

1

속임수.

원하는 범위를 Groovy에서보다 쉽게 ​​처리 할 수있는 다른 범위로 맵핑하십시오. 당신은 같은 것을 원하는 : 사실

y in [x, x+0.5, x+1, x+1.5, ..., x+n] // tricky if you want a range object 

을 경우 만

(2*x)..(2*x+2*n).contains(2*y) //simple! 

나 :

switch (2*y) { 
    case (2*x)..(2*x+2*n): doSomething(); break; 
    ...} 
범위 개체와 동일한

2*y in [2x,2x+1,2x+2,2x+3,...,2x+2n] // over whole integers only 

1
def r = [] 
(0..12).each() { 
    r << it 
    r << it + 0.5 
} 
6

늦은 조금,하지만 너무

당신의 위 세트의 한 줄 작동합니다.

(2..8) * DIV (2)

1

내 대답은 다음과 같습니다

(1..4).step(0.5) 
+0

이것이 왜 투표가 실패했는지, 저에게 효과가 있었는지 확실하지 않습니다! –

+1

@DavidMann'메소드의 서명 없음 : groovy.lang.IntRange.step()은 인수 유형에 적용 가능합니다. (java.math.BigDecimal) values ​​: [0.5]' –

1

(1..7).collect{0.5*it} 아마도 당신은 [사용자 지정 범위 IMPL (http://kousenit.wordpress.com/2009/을 만들기위한 시장에서, 나는 일반적인 스레드에 의해 판단