在Groovy中,最优雅的方法是如何指定一系列整数,并在它们之间以0.5步长增加?例如:1、1.5、2、2.5、3、3.5、4。编辑:澄清一下:作为最终结果,我需要一个范围对象,用于在Grails约束中使用。虽然列表也可以。
我能想到的最好方法是使用"step"命令。
例如:
1.step(4, 0.5){ print "$it "}
将会输出:"1 1.5 2.0 2.5 3.0 3.5"
有点晚了,但这也行
以下是你上述集合的一行代码:
(2..8)*.div(2)
好的,接着上面的内容。为了测试一个值val是否在1..n范围内,但是有一半的值:
def range = 2..(n*2).collect { return it/2.0 }
return range.contains( val )
这样做是可行的,但不够美观,但如果您需要多次使用它,则可以构建一次范围并多次使用它。
我的答案如下:
(1..4).step(0.5)
作弊。
将您想要的范围映射到另一个更容易由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;
...}
(1..7).collect{0.5*it}
是我能想到的最好的方法。
def r = []
(0..12).each() {
r << it
r << it + 0.5
}
顺便提一下,从 Groovy 1.6.0 开始,原生似乎不支持。目前仅存在 ObjectRange.step(int)。
http://groovy.codehaus.org/api/groovy/lang/ObjectRange.html#step%28int%29