我正在嘗試將 2d 整數陣列的列或行切片到Java.
我嘗試了以下語法array[:][0] or array[0][:]來獲得第一個column/row. 我收到一個錯誤,所以很可能這不是 Java 中的正確語法。在任何情況下都可以切片特定column/row的 inJava嗎?
uj5u.com熱心網友回復:
如果我沒記錯的話,Python 中的切片對應于從給定陣列中提取子陣列,所以如果你有一個如下所示的陣列:
int[][] vet = new int[][]{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
執行以下切片vet[0:3][1]對應于檢索包含元素的陣列2, 5, 8(從第 0 行包含到第 3 行排除的第二列)。
不幸的是,在 Java 中這是不可能的,至少不是“垂直”的,因為二維陣列基本上是一個陣列陣列。每個“行”索引標識一個子陣列,但實際上現在有實際的行或列,只是另一個陣列中的陣列。
您可以做的是使用該Arrays.copyOfRange()方法“水平”切片陣列。
Integer[][] vet = new Integer[][]{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
Integer[] subArray = new Integer[3];
subArray = Arrays.copyOfRange(vet[1], 0, 3); //Retrieves the elements [4, 5, 6]
相反,對于“垂直”切片,您需要撰寫一個實用方法:
public static void main(String[] args) {
Integer[][] vet = new Integer[][]{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
Integer[] subArray = new Integer[3];
verticalSlicing(vet, subArray, 1, 0, 3);
System.out.println(Arrays.toString(subArrayVert)); //Prints [2, 5, 8]
}
public static <T> void verticalSlicing(T[][] vet, T[] subArray, int col, int rowStart, int rowEnd) {
if (col < 0 || col > subArray.length || (rowEnd - rowStart) > subArray.length) {
return;
}
IntStream.range(rowStart, rowEnd).forEach(i -> subArray[i] = vet[i][col]);
}
uj5u.com熱心網友回復:
通常java中的二維陣列看起來像這樣:
double[][] doubleArray = new double[3][4];
所以獲得第一行可以是:
double[] firstRow = doubleArray[0];
獲取第一列可能如下所示:
double[] firstColumn = new double[doubleArray.length];
for (int i = 0; i < doubleArray.length; i ) {
firstColumn[i] = doubleArray[i][0];
}
uj5u.com熱心網友回復:
鑒于您索引 array[x][y] 您可以通過以下方式獲取列 x:
int column[] = array[x].
要獲得第 y 行:
int row[] = new int[array.length];
for (int i = 0; i < array.length; i ) {
row[i] = array[i][y];
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/483002.html
