【问题标题】:Fill a one-dimensional array from all the values from a two-dimensional array [duplicate]从二维数组中的所有值填充一维数组[重复]
【发布时间】:2019-03-01 09:50:44
【问题描述】:

假设我有一个包含 int 值的二维数组,我想用二维数组中的所有 int 值填充一个一维数组,我该怎么做呢?

这是我尝试过的,但是出了点问题,我不知道是什么..

int[][] twoDimensionalArray = {{5, 2, 3, 1},
                               {4, 2, 6, 9},
                               {8, 9, 1, 8}};
int[] oneDimensionalArray = new int[twoDimensionalArray.length * twoDimensionalArray.length];
for (int i = 0; i < twoDimensionalArray.length; i++) {
    for (int j = 0; j < twoDimensionalArray.length; j++) {
      oneDimensionalArray[i] = twoDimensionalArray[i][j];
     }
}

谢谢!

【问题讨论】:

  • 用 ArrayList 代替怎么样?这样你就可以遍历你的二维数组并添加所有元素。
  • 谢谢你,@Mwak

标签: java arrays


【解决方案1】:

我可以提出这样的建议,

String[][] my2Darr = {{5, 2, 3, 1},
                      {4, 2, 6, 9},
                      {8, 9, 1, 8}};
    List<String> list = new ArrayList<>();
    for(int i = 0; i < my2Darr.length; i++) {
        list.addAll(Arrays.asList(my2Darr[i])); // java.util.Arrays
    }
    String[] my1Darr = new String[list.size()];
    my1Darr = list.toArray(my1Darr);

Java 8:

int[][] 2darr = {{5, 2, 3, 1},
               {4, 2, 6, 9},
               {8, 9, 1, 8}};
int[] 1darr = Stream.of(2darr ).flatMapToInt(IntStream::of).toArray();
System.out.println(Arrays.toString(1darr ));

【讨论】:

  • 最终使用了这个,谢谢。请问为什么你只需要使用一个for循环来遍历二维数组,而不是2?
  • @Voiceeeeee 他一次将二维数组的一维添加到 ArrayList,方法是将其转换为适当的列表格式。
【解决方案2】:
int[][] twoDimensionalArray = {{5, 2, 3, 1},
                               {4, 2, 6, 9},
                               {8, 9, 1, 8}};
int[] oneDimensionalArray = new int[twoDimensionalArray.length * twoDimensionalArray.length];
for (int i = 0; i < twoDimensionalArray.length; i++) {
    for (int j = 0; j < twoDimensionalArray[0].length; j++) {
      oneDimensionalArray[i] = twoDimensionalArray[i][j];
     }
}

您的解决方案几乎是正确的。您必须将twoDimensionalArray.length 更正为twoDimensionalArray[0].length。因为你想水平和垂直迭代。如果你在 twoDimensionalArray.length 上迭代 2 次,你将迭代 2 倍水平轴的长度。

【讨论】:

  • 哦!有道理,谢谢。我最终改用了 ArrayList。
【解决方案3】:

您可以使用stream 进行操作,例如:

int[][] twoDimensionalArray = {{5, 2, 3, 1},
        {4, 2, 6, 9},
        {8, 9, 1, 8}};

int[] oneDimensionalArray = Arrays.stream(twoDimensionalArray)
    .flatMapToInt(e -> Arrays.stream(e))
    .toArray();

System.out.println(Arrays.toString(oneDimensionalArray));

【讨论】:

    【解决方案4】:

    您可以使用它,它使用System.arraycopy() 将内部数组复制到结果中:

    public static int[] flatten(int[][] input) {
        int length = input.length;
        if(length == 0) return new int[0];
    
        int[] output = new int[length * input[0].length];
        for(int i = 0; i < length; i++) {
           int[] inner = input[i];
           // 1. Parameter: the source to copy from
           // 2. Parameter: the starting index from source
           // 3. Parameter: the destionation to copy to
           // 4. Parameter: the starting index from destination
           // 5. Parameter: the amount of elements to copy
           System.arraycopy(inner, 0, output, i * length, inner.length);
        }
        return output;
    }
    

    【讨论】:

      猜你喜欢
      • 2014-12-23
      • 2021-04-14
      • 1970-01-01
      • 2015-01-24
      • 1970-01-01
      • 1970-01-01
      • 2016-05-27
      • 2019-02-26
      • 1970-01-01
      相关资源
      最近更新 更多