2011-01-15 18 views
22

¿Hay alguna manera de crear una única matriz de dos? P.ej.Combinar dos matrices de enteros

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

¿Qué estás tratando de hacer? Concatenar las matrices o sumar los elementos? – mob

Respuesta

63

Usted no puede añadir directamente, lo que tiene que hacer una nueva matriz y luego copiar cada una de las matrices en el nuevo. System.arraycopy es un método que puede usar para realizar esta 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); 

Esto funcionará independientemente del tamaño de array1 y array2.

1

Sí, pero no es tan fácil. Cree una tercera matriz que tenga el tamaño de las dos matrices combinadas y recorra cada matriz original y mueva los elementos de nuevo. También mira en System.arraycopy().

1

Halla el tamaño total de ambas matrices y establece array1and2 con el tamaño total de ambas matrices agregadas. Luego haga un loop array1 y luego array2 y agregue los valores en array1 y2.

+0

¿Alguna razón muy buena para poner un -1 para la persona que hizo eso? Por ejemplo, ¿el método sugerido falló? Si se trata simplemente de un desacuerdo sobre diferentes métodos, pero ambos producen los mismos resultados, entonces esa no es una buena razón. – thotheolh

1

NOTA: no probarlo

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

Creo que tiene que asignar una nueva matriz y poner los valores en la nueva matriz. Por ejemplo:

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

Por lo que yo puedo decir con sólo mirarlo, este código debería funcionar.

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

No elemento por elemento copiado usar, es muy lento en comparación con System.arraycopy()

0

Tarea: Dados dos matrices int Array1 y matriz2 de la misma longitud, código postal debe devolver una matriz que es el doble de largo, en el cual los elementos de array1 y array2 están intercalados. Es decir, el elemento # 0 de la matriz de resultados es la matriz1 [0], el elemento # 1 es la matriz2 [0], el elemento # 2 es la matriz1 [1], el elemento # 3 es la matriz2 [1], y así sucesivamente.

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

Aquí una función simple que utilizan argumentos variables:

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

Para usar:

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