¿Cómo copiar parte de una matriz a otra matriz en C #?

¿Cómo puedo copiar una parte de una matriz a otra matriz?

Considera que estoy teniendo

int[] a = {1,2,3,4,5}; 

Ahora bien, si doy el índice de inicio y el índice final de la matriz, debería copiarse a otra matriz.

Al igual que si doy el índice de inicio como 1 y el índice de finalización como 3, los elementos 2, 3, 4 deben copiarse en la nueva matriz.

 int[] b = new int[3]; Array.Copy(a, 1, b, 0, 3); 
  • a = array de origen
  • 1 = índice de inicio en matriz fuente
  • b = matriz de destino
  • 0 = índice de inicio en matriz de destino
  • 3 = elementos para copiar

Ver esta pregunta LINQ Take () y Skip () son las respuestas más populares, así como Array.CopyTo ().

Aquí se describe un método de extensión supuestamente más rápido.

 int[] a = {1,2,3,4,5}; int [] b= new int[a.length]; //New Array and the size of a which is 4 Array.Copy(a,b,a.length); 

Donde Array es una clase que tiene el método Copy, que copia el elemento de una matriz a b array.

Al copiar de una matriz a otra matriz, debe proporcionar el mismo tipo de datos a otra matriz que está copiando.

Nota: Encontré esta pregunta buscando uno de los pasos en la respuesta a cómo cambiar el tamaño de una matriz existente.

Así que pensé que agregaría esa información aquí, en caso de que alguien más estuviera buscando cómo hacer una copia a distancia como respuesta parcial a la cuestión de cambiar el tamaño de una matriz.

Para cualquiera que encuentre esta pregunta buscando lo mismo que yo, es muy simple:

 Array.Resize(ref arrayVariable, newSize); 

donde T es el tipo, es decir, donde se declara arrayVariable:

 T[] arrayVariable; 

Ese método maneja las comprobaciones nulas, así como newSize == oldSize no tiene ningún efecto, y por supuesto maneja silenciosamente el caso donde una de las matrices es más larga que la otra.

Vea el artículo de MSDN para más.

En caso de que quiera implementar su propio método Array.Copy .

Método estático que es de tipo genérico.

  static void MyCopy(T[] sourceArray, long sourceIndex, T[] destinationArray, long destinationIndex, long copyNoOfElements) { long totaltraversal = sourceIndex + copyNoOfElements; long sourceArrayLength = sourceArray.Length; //to check all array's length and its indices properties before copying CheckBoundaries(sourceArray, sourceIndex, destinationArray, copyNoOfElements, sourceArrayLength); for (long i = sourceIndex; i < totaltraversal; i++) { destinationArray[destinationIndex++] = sourceArray[i]; } } 

Implementación del método de frontera.

 private static void CheckBoundaries(T[] sourceArray, long sourceIndex, T[] destinationArray, long copyNoOfElements, long sourceArrayLength) { if (sourceIndex >= sourceArray.Length) { throw new IndexOutOfRangeException(); } if (copyNoOfElements > sourceArrayLength) { throw new IndexOutOfRangeException(); } if (destinationArray.Length < copyNoOfElements) { throw new IndexOutOfRangeException(); } }