多维数组转置

新手上路,请多包涵

我有一个基于行的多维数组:

 /** [row][column]. */
public int[][] tiles;

我想将此数组转换为基于列的数组,如下所示:

 /** [column][row]. */
public int[][] tiles;

……但我真的不知道从哪里开始

原文由 Antti Kolehmainen 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 423
2 个回答

尝试这个:

 @Test
public void transpose() {
    final int[][] original = new int[][]{
            {1, 2, 3, 4},
            {5, 6, 7, 8},
            {9, 10, 11, 12}};

    for (int i = 0; i < original.length; i++) {
        for (int j = 0; j < original[i].length; j++) {
            System.out.print(original[i][j] + " ");
        }
        System.out.print("\n");
    }
    System.out.print("\n\n matrix transpose:\n");
    // transpose
    if (original.length > 0) {
        for (int i = 0; i < original[0].length; i++) {
            for (int j = 0; j < original.length; j++) {
                System.out.print(original[j][i] + " ");
            }
            System.out.print("\n");
        }
    }
}

输出:

 1 2 3 4
5 6 7 8
9 10 11 12

 matrix transpose:
1 5 9
2 6 10
3 7 11
4 8 12

原文由 Kent 发布,翻译遵循 CC BY-SA 4.0 许可协议

我看到所有的答案都创建了一个新的结果矩阵。这很简单:

 matrix[i][j] = matrix[j][i];

但是,如果是方矩阵,您也可以就地执行此操作。

 // Transpose, where m == n
for (int i = 0; i < m; i++) {
    for (int j = i + 1; j < n; j++) {
        int temp = matrix[i][j];
        matrix[i][j] = matrix[j][i];
        matrix[j][i] = temp;
    }
}

这对于较大的矩阵更好,因为创建新的结果矩阵会浪费内存。如果它不是正方形,您可以创建一个尺寸为 NxM 的新尺寸,然后执行错位方法。注意:对于就地,请注意 j = i + 1 。它不是 0

原文由 Jash Sayani 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题