Syntax Groovy系列,步长为0.5

Syntax Groovy系列,步长为0.5,syntax,groovy,range,Syntax,Groovy,Range,Groovy中指定整数范围以及它们之间的0.5步的最简单方法是什么?e、 g:1,1.5,2,2.5,3,3.5,4 编辑:澄清一下:作为最终结果,我需要一个用于Grails约束的范围对象。虽然我想列表也可以。我能看到的最好方法是使用step命令 i、 e 将打印出:“1 1.5 2.0 2.5 3.0 3.5”供参考,从Groovy 1.6.0开始,它似乎不支持本机。目前只存在ObjectRange.step(int) Soo,建立在上面。要测试值val是否在1..n范围内但有一半的值,请执行

Groovy中指定整数范围以及它们之间的0.5步的最简单方法是什么?e、 g:1,1.5,2,2.5,3,3.5,4


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

我能看到的最好方法是使用step命令

i、 e


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

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


Soo,建立在上面。要测试值val是否在1..n范围内但有一半的值,请执行以下操作:

def range = 2..(n*2).collect { return it/2.0 }
return range.contains( val )
类似的东西可以工作,但没有我想要的那么漂亮,但是如果需要的话,它可以让你构建一次范围并多次使用它。

将所需范围映射到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!
或:

defr=[]
(0..12).每个(){

r有点晚了,但这也行

上述一套的一行:


我的答案如下:

(1..4).step(0.5)

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

@DavidMann
无方法签名:groovy.lang.IntRange.step()适用于参数类型:(java.math.BigDecimal)value:[0.5]
根据流行的线程判断,也许你是在市场上做一个?
switch (2*y) {
   case (2*x)..(2*x+2*n): doSomething(); break;
   ...}
def r = []
(0..12).each() {
  r << it
  r << it + 0.5
}
(1..4).step(0.5)