Groovy系列,0.5步长

时间:2009-02-21 14:52:43

标签: syntax groovy range

在Groovy中指定一系列整数以及它们之间的0.5步之间最有效的方法是什么?例如:1,1.5,2,2.5,3,3.5,4

编辑:澄清:作为最终结果,我需要一个范围对象用于Grails约束。虽然我认为列表也可以。

8 个答案:

答案 0 :(得分:29)

我能看到的最佳方式是使用步骤命令。


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

将打印出来:“1 1.5 2.0 2.5 3.0 3.5”

答案 1 :(得分:5)

有点晚了,但这也有效

上述套装的单行:

(2..8)*。DIV(2)

答案 2 :(得分:1)

Soo,建立在上面。要测试值val是否在1..n范围内但是有一半值:

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

这样的东西会起作用,但不像我想的那样漂亮,但它可以让你构建一次范围并多次使用它,如果你需要的话。

答案 3 :(得分:0)

仅供参考,从Groovy 1.6.0开始,似乎不支持原生。目前只存在ObjectRange.step(int)。

http://groovy.codehaus.org/api/groovy/lang/ObjectRange.html#step%28int%29

答案 4 :(得分:0)

作弊。

将您想要的范围映射到Groovy更容易处理的另一个范围。你想要这样的东西:

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

当且仅当:

时才是真的
 2*y in [2x,2x+1,2x+2,2x+3,...,2x+2n] // over whole integers only

与范围对象相同:

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

或:

switch (2*y) {
   case (2*x)..(2*x+2*n): doSomething(); break;
   ...}

答案 5 :(得分:0)

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

答案 6 :(得分:0)

我的回答如下:

(1..4).step(0.5)

答案 7 :(得分:0)

(1..7).collect{0.5*it}是我能想到的最好的