【发布时间】:2011-02-20 18:55:45
【问题描述】:
如何将二维数组中的元素以相同的顺序转移到一维数组中?
【问题讨论】:
-
您的意思是 {{1,2},{3,4}} 转到 {1,2,3,4} 吗?你知道数组维度吗?
-
表示相同的顺序。我的意思是 3x3 矩阵的元素复制到 i-d araay
标签: java
如何将二维数组中的元素以相同的顺序转移到一维数组中?
【问题讨论】:
标签: java
这是我看到的最有可能发生的情况。
class nikhil {
public static int[] firstIndex(int[][] arr2d) {
int rows = arr2d.length;
if(rows == 0) return new int[0];
int cols = arr2d[0].length;
if(cols == 0) return new int[0];
int[] arr1d = new int[rows * cols];
for(int i = 0; i < rows; i++) {
for(int j = 0; j < cols; j++) {
arr1d[i * cols + j] = arr2d[i][j];
}
}
return arr1d;
}
public static int[] secondIndex(int[][] arr2d) {
int rows = arr2d.length;
if(rows == 0) return new int[0];
int cols = arr2d[0].length;
if(cols == 0) return new int[0];
int[] arr1d = new int[rows * cols];
for(int i = 0; i < cols; i++) {
for(int j = 0; j < rows; j++) {
arr1d[i * rows + j] = arr2d[j][i];
}
}
return arr1d;
}
public static int[] sorted(int[][] arr2d) {
int[] arr1d = firstIndex(arr2d);
java.util.Arrays.sort(arr1d);
return arr1d;
}
public static int[] scramble(int[][] arr2d) {
int[] arr1d = firstIndex(arr2d);
java.util.List<Integer> list = new java.util.ArrayList<Integer>();
for(int i : arr1d) list.add(i);
java.util.Collections.shuffle(list);
for(int i = 0; i < list.size(); i++) arr1d[i] = list.get(i).intValue();
return arr1d;
}
public static void main(String[] args) {
/*
5 4 6 10
3 1 9 12
8 2 7 0
*/
final int rows = 3;
final int cols = 4;
int[][] arr2d = new int[rows][cols];
arr2d[0][0] = 5;
arr2d[0][1] = 4;
arr2d[0][2] = 6;
arr2d[0][3] = 10;
arr2d[1][0] = 3;
arr2d[1][1] = 1;
arr2d[1][2] = 9;
arr2d[1][3] = 12;
arr2d[2][0] = 8;
arr2d[2][1] = 2;
arr2d[2][2] = 7;
arr2d[2][3] = 0;
int[] first = firstIndex(arr2d);
int[] second = secondIndex(arr2d);
int[] sorted = sorted(arr2d);
int[] scrambled = scramble(arr2d);
System.out.println(java.util.Arrays.toString(first));
System.out.println(java.util.Arrays.toString(second));
System.out.println(java.util.Arrays.toString(sorted));
// for oli
System.out.println(java.util.Arrays.toString(scrambled));
}
}
【讨论】:
虽然已经回答here,但我将在此处发布解决方案并举个例子。
假设你有一个二维数组,例如 originalArray [ ][ ]
int a [] = {1,2,6,7,2};
int b [] = {2,44,55,2};
int c [] = {2,44,511,33};
int originalArray [][] = new array[][]{a,b,c};
案例 1:
如果上述所有一维数组的长度相同,则可以这样进行:
int[] newArray = new int[3 * a.length];
int index = 0;
for (int n = 0; n < a.length; n++) {
newArray[index++] = a[n];
newArray[index++] = b[n];
newArray[index++] = c[n];
}
案例 2:
如果以上一维数组的长度都不同,那么可以这样处理,
int[] newArray = new int[a.length + b.length + c.length];
System.arrayCopy(a, 0, newArray, 0, a.length);
System.arrayCopy(b, 0, newArray, a.length, b.length);
System.arrayCopy(c, 0, newArray, a.length + b.length, c.length);
【讨论】: