Java に python range 関数のような関数があるかどうか疑問に思っていました。
range(4)
そしてそれは戻ってきます
[0,1,2,3]
これは、強化されたループを作成する簡単な方法でした。Java でこれを行うと、 for ループがはるかに簡単になるため、すばらしいでしょう。これは可能ですか?
Java 8 (2014) ではIntStream (apache commons IntRange に類似) が追加されたため、外部ライブラリは今は必要ありません。
import java.util.stream.IntStream;
IntStream.range(0, 3).forEachOrdered(n -> {
System.out.println(n);
});
forEach
forEachOrdered
順序が重要でない場合は、 tooの代わりに使用できます。
IntStream.range(0, 3).parallel()
ループを並行して実行するために使用できます
ええと... for (int i = 0; i < k; i++)
? 強化された for ループを 1 日中記述する必要はありません。
そして、議論のために:
for (int i : range(k))
文字数: 22
for (int i = 0; i < k; i++)
文字数: 27
の実装を割り引くと、range
疑似偶数です。
Apache Commons Langを使用します。
new IntRange(0, 3).toArray();
私は通常、このような単純なものに外部ライブラリを導入することを推奨しませんが、Apache Commons は非常に広く使用されているため、おそらくプロジェクトに既に含まれているでしょう!
編集: 必ずしも for ループのように単純または高速であるとは限りませんが、意図を明確にするちょっとした構文糖衣です。
編集: @zengr の回答using IntStream
in Java 8 を参照してください。
本当に本当に Java で同等の結果を得たい場合は、さらにいくつかの作業を行う必要があります。
public int[] range(int start, int end, int step) {
int n = (int) Math.ceil((end-start)/(double)step);
int[] arange = new int[n];
for (int i = 0; i < n; i++)
arange[i] = i*step+start;
return arange;
}
range(0, 4, 1)
Python: のように、期待値を返すようになりました[0, 1, 2, 3]
。悲しいことに、Java にはこれより簡単な方法はありません。Java はPython のように表現力に優れた言語ではありません。
それは本当です。しかし、静的メソッドを作成して使用します-
public static int[] range(int index){
int[] arr = new int[index];
for(int i=0;i<index;i++){
arr[i]=i;
}
return arr;
}
range
この関数に相当する Java はありませんが、拡張された for-loopがあります。
for (String s : strings) {
// Do stuff
}
range
構文に本当に執着している場合は、独自の関数をロールすることもできますが、少しばかげているようです。
public static int[] range(int length) {
int[] r = new int[length];
for (int i = 0; i < length; i++) {
r[i] = i;
}
return r;
}
// ...
String s;
for (int i : range(arrayOfStrings.length)) {
s = arrayOfStrings[i];
// Do stuff
}
私の知る限り、Java には同等の関数はありません。しかし、あなたはそれを自分で書くことができます:
public static int[] range(int n) {
int[] ans = new int[n];
int i;
for(i = 0; i < n; i++) {
ans[i] = i;
}
return ans;
}