[英]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.