如何在ArrayList<Integer[]>
中将行更改为列?例如:
ArrayList<Integer[]> arr = ArrayList<Integer[]>();
arr.add(new Integer[]{1,2,3});
arr.add(new Integer[]{4,5,6});
应该是:
[1]: 1 4
[2]: 2 5
[3]: 3 6
如果使用ArrayList不可能,那么存储2D数据并将行更改为列的其他选项是什么?
答案 0 :(得分:9)
int[][]
有什么问题吗?这将是标准方法:
public static void main(String[] args) {
int[][] table = new int[][] { { 1, 2, 3 }, { 4, 5, 6 } };
// This code assumes all rows have same number of columns
int[][] pivot = new int[table[0].length][];
for (int row = 0; row < table[0].length; row++)
pivot[row] = new int[table.length];
for (int row = 0; row < table.length; row++)
for (int col = 0; col < table[row].length; col++)
pivot[col][row] = table[row][col];
for (int row = 0; row < pivot.length; row++)
System.out.println(Arrays.toString(pivot[row]));
}
输出:
[1, 4]
[2, 5]
[3, 6]
如果您必须使用集合,请将其用作开头:
List<List<Integer>> table = new ArrayList<List<Integer>>();
table.add(Arrays.asList(1, 4));
table.add(Arrays.asList(2, 5));
table.add(Arrays.asList(3, 6));
答案 1 :(得分:3)
此问题称为“Matrix Transpose”。如果您事先知道行数,则可以使用2D矩阵并将其转置,如下所示:
Integer[][] matrix = new Integer[rows][cols];
//Let i = 2 (rows); j = 3 (cols)
matrix[0] = new Integer[]{1,2,3};
matrix[1] = new Integer[]{4,5,6};
Integer[][] transposedMatrix = new Integer[cols][rows];
for(int i=0;i<cols;i++) {
for(int j=0;j<rows;j++) {
transposedMatrix[i][j] = matrix[j][i];
}
}
即使您事先不知道行数或列数,也可以使用其他数据结构(如ArrayList),然后使用与上面相同的逻辑。
答案 2 :(得分:2)
你可以使用两个循环 - 这样的东西应该起作用:
ArrayList<Integer[]> res = ArrayList<Integer[]>();
int C = arr.get(0).length;
int R = arr.size();
for (int c = 0 ; c != C ; c++) {
int[] row = new Integer[R];
for (int r = 0 ; r != R ; r++) {
row[r] = arr.get(R)[c];
}
res.add(row);
}
答案 3 :(得分:1)
ArrayList<Integer[]> arr = new ArrayList<Integer[]>();
arr.add(new Integer[]{1,2,3});
arr.add(new Integer[]{4,5,6});
ArrayList<Integer[]> res = new ArrayList<Integer[]>();
int C = arr.get(0).length;
int R = arr.size();
for (int c = 0 ; c != C ; c++) {
Integer[] row = new Integer[R];
for (int r = 0 ; r < R ; r++) {
row[r] = arr.get(r)[c];
}
res.add(row);
}
答案 4 :(得分:0)
您可以尝试Map
。
喜欢,
Map<Integer, Integer[]> newMap = new HashMap<Integer, Integer[]>();
newMap.put(1, new Integer[]{1,4});
newMap.put(2, new Integer[]{2,5});
将其排序,
Map<Integer, Integer[]> sortedMap = new TreeMap<Integer, Integer[]>(newMap);