Come copiare parte di un array in un altro array in C #?

Come posso copiare una parte di un array in un altro array?

Considera che sto avendo

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

Ora se fornisco l’indice di inizio e l’indice finale dell’array a dovrebbe essere copiato in un altro array.

Come se io dessi indice iniziale come 1 e indice finale come 3, gli elementi 2, 3, 4 dovrebbero essere copiati nel nuovo array.

 int[] b = new int[3]; Array.Copy(a, 1, b, 0, 3); 
  • a = array di sorgenti
  • 1 = inizia indice nell’array sorgente
  • b = array di destinazione
  • 0 = inizia indice nella matrice di destinazione
  • 3 = elementi da copiare

Vedi questa domanda Take () e Skip () LINQ sono le risposte più popolari, oltre a Array.CopyTo ().

Un metodo di estensione presumibilmente più veloce è descritto qui .

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

Dove Array è di class con metodo Copy, che copia l’elemento di una matrice in array b.

Durante la copia da un array a un altro array, è necessario fornire lo stesso tipo di dati a un altro array di cui si sta copiando.

Nota: ho trovato questa domanda cercando uno dei passaggi nella risposta a come ridimensionare un array esistente.

Quindi ho pensato di aggiungere queste informazioni qui, nel caso in cui qualcun altro stesse cercando come eseguire una copia a distanza come risposta parziale alla domanda di ridimensionamento di un array.

Per chiunque altro trovando questa domanda cercando la stessa cosa che ero, è molto semplice:

 Array.Resize(ref arrayVariable, newSize); 

dove T è il tipo, cioè dove viene dichiarato arrayVariable:

 T[] arrayVariable; 

Quel metodo gestisce i controlli nulli, così come newSize == oldSize non ha alcun effetto, e ovviamente gestisce silenziosamente il caso in cui uno degli array è più lungo dell’altro.

Vedere l’articolo MSDN per ulteriori informazioni.

Nel caso in cui si desideri implementare il proprio metodo Array.Copy .

Metodo statico che è di tipo generico.

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

Implementazione del metodo al contorno.

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