未知の次元(長さではない)の配列の要素の範囲を読み取る方法を探しています。未知の次元の配列の値の範囲を読み取る
クライアントは、オブジェクトの読み取り要求を送信し、読み取る範囲を指定できます。入力文字列は、たとえば「1:2:3:2,2:3:1:4」のようになります。これは配列の[1] [2] [3] [2]から[2] [3] [1] [4]までの範囲の要素を読みたいということです。
具体的な要素を読み取るために、私はこの関数を作成:
public Object readValue(Object obj,int[] positions) {
Object value = null; //Result
int objDimension = getDimension(obj); //Dimesion of the array
System.out.println("Dimension: " + objDimension);
try {
Object[] aux = (Object[]) obj;
for (int i = 0; i < objDimension - 1; i++) {
int pos = positions[i];
aux = (Object[]) aux[pos];
}
value = aux[positions[objDimension - 1]];
System.out.println("Result: " + value);
} catch (ArrayIndexOutOfBoundsException e) {
// TODO: Send a fault to the client.
System.out.println("Error: "+e.getMessage());
}
return value;
}
public static int getDimension(Object value) {
Class<?> clazz = value.getClass();
String className = clazz.getName();
int dimension = 0;
for (int i = 0; i < className.length(); i++) {
if (className.charAt(i) != '[') {
dimension = i;
break;
}
}
return dimension;
}
//Example.
public static void main(String[] args) {
// TODO code application logic here
TestMultiDimensioNRead test = new TestMultiDimensioNRead();
Integer[][][][] testSubject = new Integer[5][2][4][];
testSubject[0][0][2] = new Integer[8];
testSubject[0][0][0] = new Integer[15];
testSubject[0][0][1] = new Integer[20];
testSubject[0][0][3] = new Integer[2];
testSubject[1][1][2] = new Integer[7];
testSubject[1][1][2][0] = 80;
test.readValue(testSubject,new int[]{1, 1, 2, 0});
}
私は良い方法は、各次元の長さの間differensを計算することも考えていました。
誰かが良いアイデアを得ることができれば、私は本当に感謝しています。
ありがとうございます。
編集1:この質問に投稿されたコードは、未知の次元の配列内の特定の位置の値を読み取ります。私の問題は、与えられたポイントの間にあるすべての要素を読み取ることです。これは最初の質問では明らかではないかもしれません。
これは、おそらく多くの理由から推奨されるアプローチではありません。あなたは全体的に達成しようとしていることを聞くことができますか?私はおそらくあなたが問題に行く方法を考え直すだろう。 – Kurtymckurt
これはサーバー用です。サービスの1つは、あらゆる次元の配列から値の範囲を読み取ることです。配列はあらかじめ定義されておらず、ディミッションの制限もありません(Javaのディメンション上限のため255を書きました)。これは、サーバーの起動時に作成され、構成ファイルから生成されます。ところで、代替方法やアイデアは大歓迎です、ありがとうございます。 – gabun88
データをパラメータとして次元を渡すことはできますか?呼び出し側のコードがそれを知っていれば(少なくともこの用法のために)、それを把握するアルゴリズムを書くのは意味がありません。 – Kurtymckurt