在n維陣列上迭代
回答
在C/C++多維陣列(int[][]
)在所述存儲器中的平坦的方式被表示和索引操作符被翻譯成指針運算。這就是爲什麼在這些語言中做到這一點很容易和直接。
但是,這不是Java中的情況,多維數組是數組的數組。在嚴格檢查類型時,數組數組中的索引產生一個數組類型,而不是內部數組包含的類型。
所以壽回答這個問題:不,你不能這樣做,在Java的簡單,如在C/C++
要做到這一點看其他答案.. :-)
我在其他地方發現了這個。這是一個相當不錯的遞歸解決問題的方法:
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));
}
});
這可能適合你需求:
public interface ElementProcessor {
void process(Object e);
}
public static void iterate(Object o, ElementProcessor p) {
int n = Array.getLength(o);
for (int i = 0; i < n; i++) {
Object e = Array.get(o, i);
if (e != null && e.getClass().isArray()) {
iterate(e, p);
} else {
p.process(e);
}
}
}
然後,打電話時:
// the process method will be called on each element of the n-dimensional
ElementProcessor p = new ElementProcessor() {
@Override
public void process(Object e) {
// simply log for example
System.out.println(e);
}
};
int[] a1 = new int[] { 1, 2 };
int[][] a2 = new int[][] { new int[] { 3, 4 }, new int[] { 5, 6 } };
iterate(a1, p);
iterate(a2, p);
This print:
1
2
3
4
5
6
這看起來不錯,似乎是一個很好的解決方案,但我對效率感興趣,一般來說遞歸不是要走的路。 真的沒有其他辦法嗎? (我無能爲力) – user2270119 2013-04-11 14:48:01
@ user2270119在嘗試了幾件事之後,我一直無法找到任何不使用遞歸的其他解決方案......恐怕你別無選擇。請讓我知道,如果你發現另一個雖然:) – sp00m 2013-04-11 15:16:17
- 1. 在n維numpy陣列上迭代時創建新陣列
- 2. 迭代2維炭陣列
- 3. 在Python中迭代N維
- 4. 在N 2維陣列
- 5. 迭代洗牌[0..N),而不陣列
- 6. 三維陣列高效的迭代
- 7. n維陣列上的數組數學
- 8. 迭代陣列
- 9. 陣列迭代
- 10. 迭代陣列
- 11. 陣列迭代
- 12. N維陣列創建
- 13. 迭代至1D陣列和二維陣列步驟
- 14. 在陣列上優化雙重迭代
- 15. 在陣列中迭代陣列
- 16. 添加矩陣n維陣列
- 17. 迭代器陣列
- 18. 多陣列迭代
- 19. CakePHP-迭代陣列
- 20. 陣列迭代PHP
- 21. 轉換n維numpy的陣列,以2維索引陣列
- 22. Matlab:單元陣列或多個多維矩陣(迭代)
- 23. 如何從n維矩陣得到n維二維子矩陣?
- 24. 如何迭代jquery上的多陣列?
- 25. PHP陣列迭代多個陣列
- 26. 迭代未知維度的numpy矩陣
- 27. n值迭代
- 28. numpy的掩模未形N維陣列
- 29. 遍歷n維鋸齒陣列
- 30. 朱莉婭反向N維陣列
什麼是「可變維數組」? – Andremoniy 2013-04-11 11:58:09
我不認爲我理解你的問題,但在這裏:我在N^n中有一個向量,其中每個條目從0到xn。但是,我不知道n是多少,我需要一種方法來遍歷所有這些可能的向量。 – user2270119 2013-04-11 14:52:04
Hi @ user2270119習慣於選擇適合您的問題的答案。 – 2013-09-13 12:38:31