遍历二维数组

问题描述 投票:0回答:1

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

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

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

java multidimensional-array nested-loops traversal
1个回答
0
投票

如果您正在寻找处理矩阵中元素的替代方法,您可以使用流。

在下面的示例中,我使用两个

IntStream
来打印
int
矩阵。请注意,这种方法绝对不会比传统的嵌套循环更有效。这只是一种替代方法。

int[][] gameboard = new int[][]{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
IntStream.range(0, gameboard.length)
        .boxed()                                                                // boxing each int row index to an Integer
        .forEach(i -> {                                                         // process each i-th row
            IntStream.range(0, gameboard[i].length)                             // creating a nested stream to process each element of the row
                    .boxed()                                                    // boxing each int column index to an Integer
                    .forEach(j -> System.out.printf("%d ", gameboard[i][j]));   // printing the i-th j-th element
            System.out.println();
        });

这是没有索引的替代版本。

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

这是一个使用

filter
聚合操作的版本,因为您在注释中添加了您想要使用条件语句的信息。

int[][] gameboard = new int[][]{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
Arrays.stream(gameboard)
        .forEach(vet -> {
            Arrays.stream(vet)
                    .filter(x -> x % 2 == 0)  // filtering only for even numbers
                    .forEach(x -> System.out.printf("%d ", x));
            System.out.println();
        });
© www.soinside.com 2019 - 2024. All rights reserved.