[英]Function to determine if an array is one-dimensional
在Java中,如何編寫類似於以下的函數,以確定數組是否是一維的? (由於array[i].length
部分,編譯器拒絕編譯它,因為array
尚未聲明為嵌套數組。)
boolean isOneDimensional(Object[] array)
{
for (int i=0; i<array.length; i++)
if (array[i].length>1) return false;
return true;
}
您通過 getClass
獲取條目的Class
,並通過isArray
詢問該類是否為數組類型:
boolean isOneDimensional(Object[] array) { // Assuming you want an NPE if `array` is `null`, so not checking for (int i=0; i<array.length; i++) if (array[i] != null && array[i].getClass().isArray()) return false; return true; }
請注意 null
檢查,以防萬一。
不,我的壞,以上給出了錯誤的結果:
isOneDimensional(new String[2][])
基本上,有兩種我們可以處理的事情:一個真正用Object[]
創建的Object[]
,因此可以是一維或多維的,具體取決於它的內容,或者用其他東西創建的對象。 Object[]
,比如我上面的new String[2][]
。
我們可以使用上面的循環版本檢測第一個案例; 但首先,我們使用array.getClass().getComponentType().getComponentType()
檢查第二種情況array.getClass().getComponentType().getComponentType()
:
boolean isOneDimensional(Object[] array) {
// Assuming you want an NPE if `array` is `null`, so not checking
if (array.getClass().getComponentType().getComponentType() != null) {
return false;
}
for (int i=0; i<array.length; i++) {
if (array[i] != null && array[i].getClass().isArray()) {
return false;
}
}
return true;
}
我們知道第一個getComponentType
將返回非null
因為我們正在查看與Object[]
分配兼容的東西,所以它肯定有一個組件類型。 所以我們檢查該類型的組件類型,如果它已知是一個數組類型,我們根本不需要循環。
String[] o1 = new String[2]; // Yes, it's one-dimensional
String[][] o2 = new String[2][]; // No, it isn't
Object[] o3 = new Object[2]; // It may or may not be, depending on contents
Object[] o4 = new Object[2]; // It may or may not be, depending on contents
// This makes `o3` multi-dimensional
o3[0] = new Object[0];
System.out.println(isOneDimensional(o1)); // true
System.out.println(isOneDimensional(o2)); // false
System.out.println(isOneDimensional(o3)); // false
System.out.println(isOneDimensional(o4)); // true
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.