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 )
そのようなものは機能しますが、私が望むほどきれいではありませんが、必要に応じて、一度範囲を構築して複数回使用することができます.
def r = []
(0..12).each() {
r << it
r << it + 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;
...}
参考までに、Groovy 1.6.0 の時点では、ネイティブでサポートされていないようです。現時点では ObjectRange.step(int) のみが存在します。
http://groovy.codehaus.org/api/groovy/lang/ObjectRange.html#step%28int%29
私の答えは次のとおりです。
(1..4).step(0.5)
(1..7).collect{0.5*it}私が考えることができる最高です