n 次元配列 ( nは不明) を反復処理するにはどうすればよいですか?
配列のメモリ領域を単純に実行する C++ の結果を見つけましたが、JAVA でそれができるかどうかはわかりません。
n 次元配列 ( nは不明) を反復処理するにはどうすればよいですか?
配列のメモリ領域を単純に実行する C++ の結果を見つけましたが、JAVA でそれができるかどうかはわかりません。
これは別の場所で見つけました。これは、問題に対するかなり優れた再帰的ソリューションです。
interface Callback {
void visit(int[] p); // n-dimensional point
}
void visit(int[] bounds, int currentDimension, int[] p, Callback c) {
for (int i = 0; i < bounds[currentDimension]; i++) {
p[currentDimension] = i;
if (currentDimension == p.length - 1) c.visit(p);
else visit(bounds, currentDimension + 1, p, c);
}
}
visit(new int[] {10, 10, 10}, 0, new int[3], new Callback() {
public void visit(int[] p) {
System.out.println(Arrays.toString(p));
}
});
C/C++ では、多次元配列 ( int[][]
) はメモリ内でフラットな方法で表現され、インデックス演算子はポインター演算に変換されます。そのため、これらの言語でそれを行うのは簡単で簡単です。
ただし、これは Java の状況ではなく、多次元配列は配列の配列です。型は厳密にチェックされるため、配列の配列でインデックスを作成すると、内部配列に含まれる型ではなく、結果として配列型が生成されます。
だから質問に答えてください:いいえ、JavaではC / C ++のように単純にそれを行うことはできません
それを行うには、他の回答を参照してください.. :-)