¿Cómo puedo encontrar la longitud de una matriz multidimensional con reflejo en java?Multi-Dimension length array array java
Respuesta
Las matrices de Java tienen longitudes por instancia, no todas las matrices en la misma dimensión tienen que tener longitudes iguales. Dicho esto, puedes obtener la longitud de instancias en el.
Las dimensiones se pueden contar por el número de '[' en su nombre, esto es más rápido que descender la jerarquía de tipos. El siguiente código:
int[][][] ary = {{{0},{1}}};
Class cls = ary.getClass();
boolean isAry = cls.isArray();
String clsName = cls.getName();
System.out.println("is array=" + isAry);
System.out.println("name=" + clsName);
int nrDims = 1 + clsName.lastIndexOf('[');
System.out.println("nrDims=" + nrDims);
Object orly = ary;
for (int n = 0; n < nrDims; n++) {
int len = Array.getLength(orly);
System.out.println("dim[" + n + "]=" + len);
if (0 < len) {
orly = Array.get(orly, 0);
}
}
da el siguiente resultado:
is array=true
name=[[[I
nrDims=3
dim[0]=1
dim[1]=2
dim[2]=1
Class clazz = Class.forName("ReflectionTest");
Method m = clazz.getDeclaredMethod("getArray");
Object o1 = m.invoke(o, arg);
int array[][] = (int[][])o1;
System.out.println("Array length: " + array.length);
System.out.println("Array length: " + array[0].length);
Usar java.lang.reflect.Array.getLength(obj)
.
pero eso me da la longitud de esa matriz de dimensiones solamente ... –
Las matrices multidimensionales son matrices de matrices. getLength devolverá de hecho el tamaño de una matriz, pero ahora usted sabe el tamaño de la matriz que lo contiene. Usando un bucle de 0 a longitud de búsqueda - 1, puede aplicar getLength en cada elemento de esa primera matriz y averiguar los otros tamaños. –
No existe la "longitud" para la matriz multidimensional; puede no ser rectangular Supongo que estás hablando de la cantidad de dimensiones. Necesitas descender a ella iterativamente y contar.
public int getDimensionCount(Object array) {
int count = 0;
Class arrayClass = array.getClass();
while (arrayClass.isArray()) {
count++;
arrayClass = arrayClass.getComponentType();
}
return count;
}
Primero tiene que comprobar si 'Object array' es una matriz. –
No, porque el ciclo while busca por usted; si es una matriz, el método simplemente devolverá 0. – skeggse
Si te gusta me estaban tratando de obtener el número de dimensiones y el tamaño de ellos a continuación:
private static int[] getDimentionsOf(final Object expectedArray) {
if (!expectedArray.getClass().isArray()) {
return new int[0];
}
final int dimensionSize = Array.getLength(expectedArray);
final int[] innerDimensions =
(expectedArray.getClass().getComponentType().isArray())
? getDimentionsOf(Array.get(expectedArray, 0))
: new int[0];
final int lenghtPlusOne = innerDimensions.length + 1;
final int[] newDimensions = new int[lenghtPlusOne];
System.arraycopy(innerDimensions, 0, newDimensions, 1, innerDimensions.length);
newDimensions[0] = dimensionSize;
return newDimensions;
}
- 1. 2d array rows/columns length C
- 2. java convert object array a int array
- 3. Java Jagged Array
- 4. Java Array Orden descendente?
- 5. Java array of Hashtables
- 6. Perl substr (STRING, @ARRAY) ne substr (STRING, OFFSET, LENGTH)?
- 7. Conversión de Json Array a Java Array normal
- 8. Android string-array a Array
- 9. CoffeeScript “Array()” vs “new Array()”
- 10. String to Char array Java
- 11. Convertir Java Array a Iterable
- 12. Java LinkedList a matlab array
- 13. Java int ... notación de array
- 14. Implementación de Java Array HashCode
- 15. Diferencia entre int [] array y int array []
- 16. ¿Diferencias significativas en Array vs Array List?
- 17. Rubí: Array contenida en Array, cualquier orden
- 18. Tratar C cstyle array como std :: array
- 19. Convertir Numpy Array a OpenCV Array
- 20. Diferencia entre array [n] y array []?
- 21. Delegate Array
- 22. JavaScript Array
- 23. JavaScriptSerializer.Deserialize array
- 24. Ancestro común para Java Array y List
- 25. Java API para convertir Array en CSV
- 26. iteración JSON Array en Android/Java
- 27. Sort ArrayList of Array en Java
- 28. Java: Casting Object to Array type
- 29. Convertir array MD5 a String java
- 30. java array pass by reference no funciona?
estrecha, pero aún debe saber el "número" de dimensiones que tiene la matriz ... –
Veo lo que dice. Puede crear un método que pueda invocarse desde esa clase que devolverá el número de dimensiones. Si no puedes modificar esa clase, no estoy seguro. – amischiefr