2011-01-15 25 views
22

Gibt es eine Möglichkeit, ein einzelnes Array aus zwei zu erstellen? Z.B.Kombinieren Sie zwei Ganzzahl-Arrays

int[] array1 = {1,2,3}; 
int[] array2 = {4,5,6}; 
int[] array1and2 = array1 + array2; 
+1

Was versuchen Sie zu tun? Verketten Sie die Arrays oder summieren Sie die Elemente? – mob

Antwort

63

Sie nicht direkt hinzufügen können, müssen Sie ein neues Array machen und dann jedes der Arrays in die neue kopieren. System.arraycopy ist eine Methode, mit der Sie diese Kopie ausführen können.

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

Dies funktioniert unabhängig von der Größe von Array1 und Array2.

1

Ja, aber es ist nicht ganz so einfach. Erstellen Sie ein drittes Array, das die Größe der beiden kombinierten Arrays hat, und durchlaufen Sie jedes ursprüngliche Array und verschieben Sie die Elemente. Schauen Sie auch in System.arraycopy().

1

Suchen Sie die Gesamtgröße beider Arrays und setzen Sie array1and2 auf die Gesamtgröße beider hinzugefügten Arrays. Schleifen Sie dann array1 und dann array2 und fügen Sie die Werte in array1 und 2 ein.

+0

Gibt es einen sehr guten Grund, eine -1 zu setzen, für die Person, die das getan hat? Zum Beispiel schlug die vorgeschlagene Methode fehl? Wenn es nur eine Meinungsverschiedenheit über verschiedene Methoden gibt, aber beide die gleichen Ergebnisse liefern, dann ist das kein guter Grund. – thotheolh

1

HINWEIS: testete es ihnen nicht

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

Ich denke, Sie müssen ein neues Array zuweisen und die Werte in das neue Array einfügen. Zum Beispiel:

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

Soweit ich nur sagen kann, sollte dieser Code funktionieren.

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

nicht Element-für-Element Verwenden Sie Kopieren, dann ist es sehr langsam im Vergleich zu System.arraycopy()

0

Aufgabe: Gegeben zwei int Arrays Array1 und array2 von gleicher Länge sollte zip ein Array zurück, die zweimal ist als lang, in dem die Elemente von Array1 und Array2 verschachtelt sind. Das heißt, Element # 0 des Ergebnis-Arrays ist Array1 [0], Element # 1 ist Array2 [0], Element # 2 ist Array1 [1], Element # 3 ist Array2 [1] und so weiter.

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

Hier ist eine einfache Funktion, die variable Argumente verwenden:

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

zu benutzen:

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

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

import org.apache.commons.lang3.ArrayUtils; 

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