Fusionar dos matrices en .NET

Resuelto kbrinley asked hace 16 años • 28 respuestas

¿Existe una función integrada en .NET 2.0 que tomará dos matrices y las fusionará en una sola?

Ambas matrices son del mismo tipo. Obtengo estas matrices de una función ampliamente utilizada dentro de mi código base y no puedo modificar la función para devolver los datos en un formato diferente.

Estoy buscando evitar escribir mi propia función para lograr esto si es posible.

kbrinley avatar Sep 12 '08 22:09 kbrinley
Aceptado

En C# 3.0 puedes usar el método Concat de LINQ para lograr esto fácilmente:

int[] front = { 1, 2, 3, 4 };
int[] back = { 5, 6, 7, 8 };
int[] combined = front.Concat(back).ToArray();

En C# 2.0 no tienes una forma tan directa, pero Array.Copy es probablemente la mejor solución:

int[] front = { 1, 2, 3, 4 };
int[] back = { 5, 6, 7, 8 };

int[] combined = new int[front.Length + back.Length];
Array.Copy(front, combined, front.Length);
Array.Copy(back, 0, combined, front.Length, back.Length);

Esto podría usarse fácilmente para implementar su propia versión de Concat.

OwenP avatar Sep 12 '2008 15:09 OwenP

Utilice LINQ :

var arr1 = new[] { 1, 2, 3, 4, 5 };
var arr2 = new[] { 6, 7, 8, 9, 0 };
var arr = arr1.Union(arr2).ToArray();

Tenga en cuenta que esto eliminará los duplicados. Si desea conservar duplicados, utilice Concat.

Simon B. avatar May 23 '2014 06:05 Simon B.

Si puede manipular una de las matrices, puede cambiar su tamaño antes de realizar la copia:

T[] array1 = getOneArray();
T[] array2 = getAnotherArray();
int array1OriginalLength = array1.Length;
Array.Resize<T>(ref array1, array1OriginalLength + array2.Length);
Array.Copy(array2, 0, array1, array1OriginalLength, array2.Length);

De lo contrario, puedes crear una nueva matriz.

T[] array1 = getOneArray();
T[] array2 = getAnotherArray();
T[] newArray = new T[array1.Length + array2.Length];
Array.Copy(array1, newArray, array1.Length);
Array.Copy(array2, 0, newArray, array1.Length, array2.Length);

Más información sobre los métodos de matriz disponibles en MSDN .

Blair Conrad avatar Sep 12 '2008 15:09 Blair Conrad