![](/img/trans.png)
[英]Obtaining a list of arrays by diagonally traversing a 2D array with left-leaning diagonal sections?
[英]How to iterate through a rectangular 2D array and create char[] arrays with backwards (left-leaning) diagonal sections?
我想使用一个矩形数组来创建另一个2D数组,该数组中充满了向左倾斜的对角线部分。
我已经阅读了这个问题的最佳答案,并且尝试使它对我有用,但是它仅显示了如何获得右倾部分。
换句话说,如果它从左下角开始,则创建的新2D数组应包含以下值:
{'u'},
{'p', 'v'},
{'k', 'q', 'w'},
{'f', 'l', 'r', 'x'},
{'a', 'g', 'm', 's', 'z',}
// etc..
如何使2D数组充满左倾斜的对角线部分?
我的代码示例:
public class MCVE {
private static char[][] bigArray = {
{'a', 'b', 'c', 'd', 'e', 'q'},
{'f', 'g', 'h', 'i', 'j', 'w'},
{'k', 'l', 'm', 'n', 'o', 'e'},
{'p', 'q', 'r', 's', 't', 'r'},
{'u', 'v', 'w', 'x', 'z', 't'}};
public static void main(String[] args) {
addForwardsDiagonals();
}
private static void addForwardsDiagonals() {
final int WIDTH = bigArray[0].length;
final int HEIGHT = bigArray.length;
ArrayList<Character> charArr = new ArrayList<>(5);
char[][] diagonalArr = new char[bigArray.length + bigArray[0].length -1][];
// iterate through the array diagonally
for( int k = 0 ; k <= WIDTH + HEIGHT - 2; k++ ) {
for( int j = 0 ; j <= k ; j++ ) {
int i = k - j;
if( i < HEIGHT && j < WIDTH )
charArr.add(bigArray[i][j]);
}
// create a char[] array from charArr
charArr.trimToSize();
char[] tempArr = new char[charArr.size()];
for(int i = 0; i < tempArr.length; i++)
tempArr[i] = charArr.get(i);
// add the newly created char[] array to diagonalArr
diagonalArr[k] = (tempArr);
// clear charArr
charArr.clear();
}
// print the new 2D array
for(char[] arr: diagonalArr) {
for(char c: arr) {
System.out.print(c + " ");
}
System.out.println();
}
}
}
有幸福吗?
public class MVCE {
private static char[][] bigArray = {
{'a', 'b', 'c', 'd', 'e', 'q'},
{'f', 'g', 'h', 'i', 'j', 'w'},
{'k', 'l', 'm', 'n', 'o', 'e'},
{'p', 'q', 'r', 's', 't', 'r'},
{'u', 'v', 'w', 'x', 'z', 't'}};
public static void main(String[] args) {
addForwardsDiagonals();
}
private static char[][] addForwardsDiagonals() {
System.out.println(bigArray.length);
System.out.println(bigArray[0].length);
char[][] returnArray = new char[bigArray.length][bigArray[0].length];
for(int i=bigArray.length-1; i>=0; i--) {
for (int j=0; j<bigArray[0].length && j<i+1; j++) {
System.out.println(i+" "+j);
System.out.println(bigArray[i][j]);
returnArray[i][j] = bigArray[i][j];
}
}
return returnArray;
/* 1. 4, 0 u
* 2. 3, 0 p|| 4, 1 v
* 3. 2, 0 k|| 3, 1 q|| 4, 2 w
* 4. 1, 0 f|| 2, 1 l|| 3, 2 r|| 4, 3 x
* 5. 0, 0 a|| 1, 1 g|| 2, 2 m|| 3, 3 s|| 4, 4 z
*/
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.