Groovy диапазон с размером шага 0,5 - PullRequest
11 голосов
/ 21 февраля 2009

Какой самый лучший способ в Groovy указать диапазон целых чисел и 0,5 шага между ними? например: 1, 1,5, 2, 2,5, 3, 3,5, 4

Редактировать: Чтобы уточнить: В качестве конечного результата мне нужен объект диапазона для использования в ограничении Grails. Хотя я полагаю, что список тоже будет в порядке.

Ответы [ 8 ]

29 голосов
/ 21 февраля 2009

Лучший способ увидеть это использовать команду шага.

т.е.


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

напечатает: «1 1,5 2,0 2,5 3,0 3,5»

5 голосов
/ 09 сентября 2009

Немного поздно, но это тоже работает

Однострочник для вышеприведенного набора:

(2..8) *. ДИВ (2)

1 голос
/ 21 февраля 2009

Су, чтобы построить на выше. Чтобы проверить, находится ли значение val в диапазоне 1..n, но с половинными значениями:

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

Нечто подобное будет работать, но не так красиво, как хотелось бы, но позволяет вам создать диапазон один раз и использовать его несколько раз, если вам это нужно.

0 голосов
/ 15 ноября 2014

(1..7).collect{0.5*it} - лучшее, что я могу придумать

0 голосов
/ 26 апреля 2012

мой ответ следующий:

(1..4).step(0.5)
0 голосов
/ 29 мая 2009
def r = []
(0..12).each() {
  r << it
  r << it + 0.5
}
0 голосов
/ 14 марта 2009

Чит.

Сопоставьте желаемый диапазон с другим, более простым в работе с 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;
   ...}
0 голосов
/ 21 февраля 2009

К вашему сведению, начиная с Groovy 1.6.0, он не поддерживает изначально. На данный момент существует только ObjectRange.step (int).

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

...