2011-01-15 25 views
22

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; 
+1

Quale stai cercando di fare? Concatenare gli array o sommare gli elementi? – mob

risposta

63

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.

1

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().

1

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.

+0

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

1

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

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.

3
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()

0

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; 

} 
6

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)); 
2

uso ArrayUtils.addAll (T [], T ...):

import org.apache.commons.lang3.ArrayUtils; 

AnyObject[] array1 = ...; 
AnyObject[] array2 = ...; 
AnyObject[] mergedArray = ArrayUtils.addAll(array1, array2); 
Problemi correlati