簡體   English   中英

如何將參差不齊的二維數組轉換為矩形二維數組?

[英]How do I convert a ragged 2D array to a rectangular 2D array?

創建一個方法cleanMatrix ,它接受一個參差不齊的 2D int數組,並返回一個具有相同值的矩形數組。

例如:

輸入:

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

Output:

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

如果你必須制作一個鋸齒狀二維數組rectangle ,你可以對每一行使用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]

Int arrays 初始化為 0,因此您只需在需要時擴展子 arrays。 解決方案可能看起來有點像這樣(未經測試)。

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];
    }    
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM