12

Groovyで整数の範囲とそれらの間の0.5ステップを指定するための最も洗練された方法は何ですか?例:1、1.5、2、2.5、3、3.5、4

編集:明確にするために:最終結果として、Grails制約で使用する範囲オブジェクトが必要です。リストも大丈夫だと思いますが。

4

8 に答える 8

30

私が見ることができる最良の方法は、 step コマンドを使用することです。

すなわち


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

「1 1.5 2.0 2.5 3.0 3.5」と出力されます。

于 2009-02-21T15:05:47.093 に答える
5

少し遅れましたが、これも機能します

上記のセットのワンライナー:

(2..8)*.div(2)

于 2009-09-08T22:41:36.327 に答える
1

スー、上に構築します。値 val が 1..n の範囲内にあるが半分の値であるかどうかをテストするには、次のようにします。

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

そのようなものは機能しますが、私が望むほどきれいではありませんが、必要に応じて、一度範囲を構築して複数回使用することができます.

于 2009-02-21T17:08:44.193 に答える
0
def r = []
(0..12).each() {
  r << it
  r << it + 0.5
}
于 2009-05-29T16:32:28.033 に答える
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;
   ...}
于 2009-03-14T17:28:44.873 に答える
0

参考までに、Groovy 1.6.0 の時点では、ネイティブでサポートされていないようです。現時点では ObjectRange.step(int) のみが存在します。

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

于 2009-02-21T15:14:09.600 に答える
0

私の答えは次のとおりです。

(1..4).step(0.5)
于 2012-04-26T12:07:03.320 に答える
0

(1..7).collect{0.5*it}私が考えることができる最高です

于 2014-11-14T22:38:20.837 に答える