Groovy range with a 0.5 step size

2020-02-10 04:29发布

What's the most elgant way in Groovy to specify a range of integers and the 0.5 steps between them? e.g.: 1, 1.5, 2, 2.5, 3, 3.5, 4

Edit: To clarify: As an end result I need a range object for use in a Grails constraint. Though I suppose a list would be OK too.

8条回答
beautiful°
2楼-- · 2020-02-10 05:25

Best way I can see is using the step command.

i.e.


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

would print out: "1 1.5 2.0 2.5 3.0 3.5"

查看更多
唯我独甜
3楼-- · 2020-02-10 05:27

Cheat.

Map your desired range into another that is more easily handled by Groovy. You want something like:

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

which is true if and only if:

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

which is the same as the range object:

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

or:

switch (2*y) {
   case (2*x)..(2*x+2*n): doSomething(); break;
   ...}
查看更多
登录 后发表回答