Làm cách nào để tìm độ dài của mảng đa chiều với sự phản chiếu trên java?Phản ánh mảng chiều dài đa chiều java
Trả lời
Mảng Java có độ dài mỗi trường hợp, không phải tất cả các mảng trong cùng một tham số đều phải có độ dài bằng nhau. Điều đó nói rằng, bạn có thể nhận được độ dài của các thể hiện trong.
Thứ nguyên có thể được tính bằng số '[' trong tên của chúng, điều này nhanh hơn giảm dần phân cấp loại. Các mã sau đây:
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);
}
}
cho đầu ra sau đây:
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);
Sử dụng java.lang.reflect.Array.getLength(obj)
.
nhưng điều đó mang lại cho tôi độ dài của mảng thứ nguyên đó ... –
Mảng đa chiều là mảng của mảng. getLength sẽ trả về kích thước thực của một mảng, nhưng bây giờ bạn biết kích thước của mảng chứa. Sử dụng một vòng lặp từ 0 đến độ dài tìm thấy - 1, bạn có thể áp dụng getLength trên mỗi phần tử của mảng đầu tiên đó và tìm ra các kích thước khác. –
Không có thứ gì như "độ dài" cho mảng đa chiều; nó có thể không phải là hình chữ nhật. Tôi đoán bạn đang nói về số lượng kích thước. Bạn cần phải đi vào nó lặp đi lặp lại và đếm.
public int getDimensionCount(Object array) {
int count = 0;
Class arrayClass = array.getClass();
while (arrayClass.isArray()) {
count++;
arrayClass = arrayClass.getComponentType();
}
return count;
}
Trước tiên bạn phải kiểm tra xem 'mảng đối tượng' có phải là một mảng hay không. –
Bạn không, vì vòng lặp while kiểm tra cho bạn - nếu nó là một mảng, phương thức sẽ trả về 0. – skeggse
Nếu bạn thích tôi đã cố gắng để có được số lượng kích thước và kích thước của chúng thì:
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. Java: mảng đa chiều vs Một chiều
- 2. Bắt trường "chiều dài" trong một mảng Java sử dụng phản ánh
- 3. Mảng Chiều dài trong Java
- 4. Kiểm tra Chiều dài đa chiều Mảng với Javascript
- 5. Nhân bản mảng đa chiều
- 6. Arrays.fill với mảng đa chiều trong Java
- 7. Java serialization của mảng đa chiều
- 8. Nhận chiều dài của mảng chuỗi không rõ chiều dài
- 9. SetLength trên mảng đa chiều
- 10. Powershell đa chiều Mảng
- 11. jquery.each mảng đa chiều
- 12. Đa chiều std :: mảng
- 13. Mảng đa chiều JavaScript
- 14. Mảng đa chiều trong Python
- 15. Lấy chiều dài mảng của một mảng 2D trong Java
- 16. SQLAlchemy - chiều dài cột tối đa
- 17. Biến mảng đa chiều thành mảng một chiều
- 18. Chiều dài mảng của mảng Array.pop() không?
- 19. array_map cho mảng đa chiều
- 20. array_slice trong mảng đa chiều?
- 21. array_filter và mảng đa chiều
- 22. C++ đa chiều mảng khởi
- 23. array_diff() với mảng đa chiều
- 24. NumPy mảng đa chiều slicing
- 25. Cách tăng chiều dài của mảng
- 26. Mảng đa chiều so với nhiều mảng
- 27. Mẫu biến thể Mảng đa chiều Mảng
- 28. Android: chiều dài tối đa của url
- 29. PHP foreach lặp qua mảng đa chiều
- 30. Nhân bản sâu mảng đa chiều trong Java ...?
gần, nhưng vẫn phải biết "số" của các kích thước mà mảng có ... –
Tôi thấy những gì bạn đang nói. Bạn có thể tạo một phương thức có thể được gọi ra từ lớp đó sẽ trả về số thứ nguyên. Nếu bạn không thể sửa đổi lớp đó, tôi không chắc chắn. – amischiefr