【问题标题】:How do I convert a ragged 2D array to a rectangular 2D array?如何将参差不齐的二维数组转换为矩形二维数组?
【发布时间】:2021-05-30 02:22:27
【问题描述】:

创建一个方法cleanMatrix,它接受一个参差不齐的二维int 数组,并返回一个具有相同值的矩形数组。

例如:

输入:

{{1, 2, 3, 3, 1, 7},
{6, 8, 7, 1},
{2, 3, 4, 5, 11},
{12}}

输出:

{{1, 2, 3, 3, 1, 7},
{6, 8, 7, 1, 0, 0},
{2, 3, 4, 5, 11, 0},
{12, 0, 0, 0, 0, 0}}

【问题讨论】:

    标签: java arrays multidimensional-array jagged-arrays


    【解决方案1】:

    如果你必须制作一个锯齿状二维数组矩形,你可以对每一行使用Arrays.copyOf方法并指定一个新的长度:

    int length = 6;
    int[][] jagged = {
            {1, 2, 3, 3, 1, 7},
            {6, 8, 7, 1},
            {2, 3, 4, 5, 11},
            {12}};
    
    int[][] rectangular = Arrays
            .stream(jagged)
            .map(row -> Arrays.copyOf(row, length))
            .toArray(int[][]::new);
    
    Arrays.stream(rectangular).map(Arrays::toString).forEach(System.out::println);
    //[1, 2, 3, 3, 1, 7]
    //[6, 8, 7, 1, 0, 0]
    //[2, 3, 4, 5, 11, 0]
    //[12, 0, 0, 0, 0, 0]
    

    【讨论】:

      【解决方案2】:

      Int 数组初始化为 0,因此您可以在需要时扩展子数组。 解决方案可能看起来有点像这样(未经测试)。

      int[][] source = <your source array>;
      
      final int neededSize = <length you want extend the subs to>;
      
      for(int i = 0; i < source.length; i++){
          if(source[i].length < neededSize){
              source[i] = getExtendedArray(source[i]);
          }
      }
      
      int[] getExtendedArray(int[] originalArr){
          int[] tempArr = new int[neededSize];
          for(int x = 0; x < originalArr.length; x++){
              tempArr[x] = originalArr[x];
          }    
      }
      

      【讨论】:

        猜你喜欢
        • 2019-01-23
        • 1970-01-01
        • 2011-07-05
        • 2019-07-09
        • 2015-07-16
        • 1970-01-01
        • 1970-01-01
        • 2021-01-31
        相关资源
        最近更新 更多