C'è un modo per creare un singolo array su due? Per esempio.Combina due array di numeri interi
int[] array1 = {1,2,3};
int[] array2 = {4,5,6};
int[] array1and2 = array1 + array2;
C'è un modo per creare un singolo array su due? Per esempio.Combina due array di numeri interi
int[] array1 = {1,2,3};
int[] array2 = {4,5,6};
int[] array1and2 = array1 + array2;
non è possibile aggiungere direttamente, devi fare un nuovo array e quindi copiare ciascuna delle matrici in quello nuovo. System.arraycopy è un metodo che è possibile utilizzare per eseguire questa copia.
int[] array1and2 = new int[array1.length + array2.length];
System.arraycopy(array1, 0, array1and2, 0, array1.length);
System.arraycopy(array2, 0, array1and2, array1.length, array2.length);
Funzionerà indipendentemente dalle dimensioni di array1 e array2.
Sì, ma non è proprio così facile. Creare un terzo array che sia la dimensione dei due array combinati e passare attraverso ogni array originale e spostare gli elementi. Guarda anche su System.arraycopy()
.
Trova la dimensione totale di entrambi gli array e imposta array1and2 sulla dimensione totale di entrambi gli array aggiunti. Quindi loop array1 e quindi array2 e aggiungere i valori in array1and2.
Qualche buona ragione per mettere un -1, per la persona che lo ha fatto? Ad esempio, il metodo suggerito non è riuscito? Se è semplicemente un disaccordo su diversi metodi, ma entrambi producono gli stessi risultati, allora non è una buona ragione. – thotheolh
NOTA: non testarlo
int[] concatArray(int[] a, int[] b) {
int[] c = new int[a.length + b.length];
int i = 0;
for (int x : a) { c[i] = x; i ++; }
for (int x : b) { c[i] = x; i ++; }
return c;
}
Penso che sia necessario allocare un nuovo array e inserire i valori nel nuovo array. Ad esempio:
int[] array1and2 = new int[array1.length + array2.length];
int currentPosition = 0;
for(int i = 0; i < array1.length; i++) {
array1and2[currentPosition] = array1[i];
currentPosition++;
}
for(int j = 0; j < array2.length; j++) {
array1and2[currentPosition] = array2[j];
currentPosition++;
}
Per quanto posso dire basta guardarlo, questo codice dovrebbe funzionare.
int [] newArray = new int[old1.length+old2.length];
System.arraycopy(old1, 0, newArray, 0, old1.length);
System.arraycopy(old2, 0, newArray, old1.length, old2.length);
Non utilizzare elemento per elemento di copia, è molto lento rispetto a System.arraycopy()
Task: Dati due array di int matrice1 e matrice2 della stessa lunghezza, zip dovrebbero restituire una matrice che è due volte più lungo, in cui gli elementi di array1 e array2 sono interlacciati. Cioè, l'elemento # 0 dell'array di risultati è array1 [0], l'elemento # 1 è array2 [0], l'elemento # 2 è array1 [1], l'elemento # 3 è array2 [1] e così via.
public static int [] zip(int [ ] array1, int [] array2) {
//make sure both arrays have same length
if (array1.length != array2.length) {
throw new IllegalArgumentException("Unequal array lengths - zip not possible");
}
int [] zippedArray = new int [array1.length+ array2.length];
int idx_1 = 0;
int idx_2 = 0;
//for each element of first array, add to new array if index of new array is even
for (int i=0; i < zippedArray.length; i+=2){
zippedArray[i]= array1[idx_1++];
}
for (int i=1; i < zippedArray.length; i+=2){
zippedArray[i]= array2[idx_2++];
}
//check contents of new array
for (int item: zippedArray){
System.out.print(item + " ");
}
return zippedArray;
}
Ecco una semplice funzione che utilizzano argomenti variabili:
final static
public int[] merge(final int[] ...arrays) {
int size = 0;
for (int[] a: arrays)
size += a.length;
int[] res = new int[size];
int destPos = 0;
for (int i = 0; i < arrays.length; i++) {
if (i > 0) destPos += arrays[i-1].length;
int length = arrays[i].length;
System.arraycopy(arrays[i], 0, res, destPos, length);
}
return res;
}
Per utilizzare:
int[] array1 = {1,2,3};
int[] array2 = {4,5,6};
int[] array3 = {7,8,9};
int[] array1and2and3 = merge(array1, array2, array3);
for (int x: array1and2and3)
System.out.print(String.format("%3d", x));
uso ArrayUtils.addAll (T [], T ...):
import org.apache.commons.lang3.ArrayUtils;
AnyObject[] array1 = ...;
AnyObject[] array2 = ...;
AnyObject[] mergedArray = ArrayUtils.addAll(array1, array2);
Quale stai cercando di fare? Concatenare gli array o sommare gli elementi? – mob