[英]Turning two 2-Dimensional Arrays into one 2-Dimensional Array with different length of Arrays and different length of Arrays inside 2D Array
例子:
int[][] ary2DFirst = new int[][]{{1,1,1,1},{2,2,2},{3,3,3}};
int[][] ary2DSecond = new int[][]{{4},{5,5,5,5,5}};
結果應該是
addedUpAry2D == {{1,1,1,1},{2,2,2},{3,3,3},{4},{5,5,5,5,5}}
我不能用二維陣列噴射它,只能用一維陣列(如下所示)謝謝
import java.util.Arrays;
public class ArraysAndMore {
public static int[] add2D(int[][]ary1, int[][]ary2){
//Attention please. the return must be a two dimensional Array, because i couldnt do it, i did it with a one Dimensional Array.
int aryElementCountFirst = 0;
int aryElementCountSecond = 0;
for (int[] i:ary1) {
for (int n:i) {
aryElementCountFirst++;
}
}
for (int[] i:ary2) {
for (int n:i) {
aryElementCountSecond++;
}
}
int[]arysInOneDFirst = new int[aryElementCountFirst];
int[]arysInOneDSecond = new int[aryElementCountSecond];
int counter = 0;
for (int[] i:ary1) {
for (int n:i) {
arysInOneDFirst[counter++] = n;
}
}
int counter2 = 0;
for (int[] i:ary2) {
for (int n:i) {
arysInOneDSecond[counter2++] = n;
}
}
int[] aryTwo1Dtogether = add(arysInOneDFirst, arysInOneDSecond);
return aryTwo1Dtogether; **//should be a 2D Array!!**
}
public static int[] add(int[] ary1, int[]ary2) {
** //This Method turns two 1D Arrays into one 1D Array**\
if(ary1.length==0 && ary2.length==0){
return new int[0];
}
int[]addedUp = new int[ary1.length+ ary2.length];
int counter = 0;
for (int i = 0; i < ary1.length; i++) {
addedUp[counter++] = ary1[i];
}
for (int i = 0; i < ary2.length; i++) {
addedUp[counter++] = ary2[i];
}
return addedUp;
}
public static void main(String[] args) {
int[][] ary2D1 = new int[][]{{1,1,1,1},{2,2,2},{3,3,3}};
int[][] ary2D2 = new int[][]{{4},{5,5,5,5,5}};
System.out.println(Arrays.toString(add2D(ary2D1, ary2D2)));
}
}
我的 Output 看起來像這樣:
[1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 5, 5, 5, 5, 5]
它需要看起來像這樣:
{{1,1,1,1},{2,2,2},{3,3,3},{4},{5,5,5,5,5}}
像這樣嘗試。
Arrays.copyOf
創建一個相同大小的新數組並復制第一個。public class ArraysAndMore {
public static void main(String[] args) {
int[][] ary2DFirst = new int[][]
{
{1,1,1,1},
{2,2,2},
{3,3,3}};
int[][] ary2DSecond = new int[][]
{
{4},
{5,5,5,5,5}};
int[][] result = add2D(ary2DFirst, ary2DSecond);
System.out.println(Arrays.deepToString(result));
}
public static int[][] add2D(int[][] ary1, int[][] ary2) {
// allocate a new array of proper size
int[][] result = new int[ary1.length + ary2.length][];
// copy the first array
for (int i = 0; i < ary1.length; i++) {
result[i] = Arrays.copyOf(ary1[i], ary1[i].length);
}
// copy the second array;
int k = ary1.length;
for (int i = 0; i < ary2.length; i++) {
result[k++] = Arrays.copyOf(ary2[i], ary2[i].length);
}
return result;
}
}
印刷
[[1, 1, 1, 1], [2, 2, 2], [3, 3, 3], [4], [5, 5, 5, 5, 5]]
要記住的關鍵是二維 arrays 只是 arrays 的 arrays。
完成同樣事情的另一種方法是使用流。
int result2[][] = Stream.of(ary2DFirst, ary2DSecond)
.flatMap(Arrays::stream).map(s -> Arrays.copyOf(s, s.length))
.toArray(int[][]::new);
需要Arrays.copyOf
以確保 arrays 不共享對象。
您可以使用System.arraycopy
來執行此操作。 您不需要指定數組第二維的大小(這是您能夠以原始 arrays 開始的方式)。
第一個副本獲取a1
並將其添加到a
(生成的數組),然后將a2
添加到a1
的末尾(現在位於a
中)。
public class so75024045 {
public static void main(String[] args) {
int[][] a1 = new int[][] { { 1, 1, 1, 1 }, { 2, 2, 2 }, { 3, 3, 3 } };
int[][] a2 = new int[][] { { 4 }, { 5, 5, 5, 5, 5 } };
int[][] a = new int[a1.length + a2.length][];
System.arraycopy(a1, 0, a, 0, a1.length);
System.arraycopy(a2, 0, a, a1.length, a2.length);
for (int[] x : a) {
for (int y : x) {
System.out.print(y + " ");
}
System.out.println("");
}
}
}
使用流的另一種簡單方法:
public static int[][] add2D(int[][]ary1, int[][]ary2){
return Stream.concat(Arrays.stream(ary1), Arrays.stream(ary2))
.toArray(int[][]::new);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.