遍历二维数组

Traversing through a 2D array

我想弄清楚如何遍历二维数组。我这样做的方法是使用嵌套的 for 循环。我很想知道还有其他方法可以做到这一点。我只是觉得我在重复使用嵌套的 for 循环,我不想这样做。

for(int i=0; i<gameBoard.length; i++) {
    for(int j=0; j<gameBoard[i].length; j++) {
}

这是我知道如何访问数组中多个元素的唯一方法。还有其他遍历多维数组的方法吗?

如果您只是想寻找其他方法来处理矩阵中的元素,只是为了获取知识,您可以使用流。

在这里,我使用两个 IntStreams 来打印一个 int 矩阵。请注意,这绝对不会比经典的嵌套 for 方法更有效,它只是一种替代方法。

int[][] gameboard = new int[][]{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
IntStream.range(0, gameboard.length)
        .boxed()
        .peek(i -> IntStream.range(0, gameboard[i].length)
                .boxed()
                .forEach(j -> System.out.printf("%d ", gameboard[i][j])))
        .forEach(i -> System.out.println());

同样,以前的代码也可以以没有索引的形式重新创建。

int[][] gameboard = new int[][]{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
Arrays.stream(gameboard)
        .peek(vet -> Arrays.stream(vet)
                .forEach(x -> System.out.printf("%d ", x)))
        .forEach(vet -> System.out.println());

编辑

因为在评论中我读到你想使用更紧凑的形式,也允许你使用条件语句,那么你正在寻找的可能会加强流方法,因为你可以从filter聚合运算。

在这里,我使用前面的示例仅打印偶数。

int[][] gameboard = new int[][]{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
Arrays.stream(gameboard)
        .peek(vet -> Arrays.stream(vet)
                .filter(x -> x % 2 == 0)
                .forEach(x -> System.out.printf("%d ", x)))
        .forEach(vet -> System.out.println());