Comment copier une partie d’un tableau dans un autre tableau en C #?

Comment puis-je copier une partie d’un tableau dans un autre tableau?

Considérez que j’ai

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

Maintenant, si je donne l’index de début et l’index de fin du tableau, il devrait être copié dans un autre tableau.

Comme si je donnais l’index de début 1 et l’index de fin 3, les éléments 2, 3 et 4 devraient être copiés dans le nouveau tableau.

 int[] b = new int[3]; Array.Copy(a, 1, b, 0, 3); 
  • un tableau source =
  • 1 = index de démarrage dans le tableau source
  • b = tableau de destination
  • 0 = index de démarrage dans le tableau de destination
  • 3 = éléments à copier

Voir cette question . LINQ Take () et Skip () sont les réponses les plus populaires, tout comme Array.CopyTo ().

Une méthode d’extension prétendument plus rapide est décrite ici .

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

Où Array est la classe ayant la méthode Copy, qui copie l’élément d’un tableau sur b array.

Lors de la copie d’un tableau vers un autre tableau, vous devez fournir le même type de données à un autre tableau que vous copiez.

Note: J’ai trouvé cette question en cherchant l’une des étapes de la réponse à la façon de redimensionner un tableau existant.

J’ai donc pensé append cette information ici, au cas où quelqu’un d’autre chercherait à faire une copie à distance en réponse partielle à la question du redimensionnement d’un tableau.

Pour quiconque a trouvé cette question en cherchant la même chose que moi, c’est très simple:

 Array.Resize(ref arrayVariable, newSize); 

T est le type, c’est-à-dire où arrayVariable est déclaré:

 T[] arrayVariable; 

Cette méthode gère les vérifications nulles, ainsi que newSize == oldSize n’ayant aucun effet et, bien sûr, gère silencieusement le cas où l’un des tableaux est plus long que l’autre.

Consultez l’article MSDN pour plus d’informations.

Dans le cas où vous souhaitez implémenter votre propre méthode Array.Copy .

Méthode statique de type générique.

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

Mise en œuvre de la méthode des limites.

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