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


144

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, ail devrait être copié dans un autre tableau.

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

Réponses:


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

7
Avec les paramètres nommés qui sont disponibles maintenant, vous n'auriez pas besoin de documenter l'un des 5 paramètres.
Hamish Grubijan

11
@Hamish bien, peut-être. Personnellement, je n'ajouterais pas de noms explicites à moins que cela ne rende le code beaucoup plus clair, et je ne suis pas sûr (dans ce cas) que les noms de paramètres par eux - mêmes y parviendraient.
Marc Gravell


3
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 une classe ayant la méthode Copy, qui copie l'élément d'un tableau dans un tableau b.

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.


1

Remarque: j'ai trouvé cette question à la recherche de l'une des étapes de la réponse pour redimensionner un tableau existant.

J'ai donc pensé ajouter ces informations ici, au cas où quelqu'un d'autre chercherait comment faire une copie à distance comme réponse partielle à la question du redimensionnement d'un tableau.

Pour quiconque trouve cette question à la recherche de la même chose que moi, c'est très simple:

Array.Resize<T>(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 sans 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 en savoir plus.


0

Si vous souhaitez implémenter votre propre méthode Array.Copy .

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

 static void MyCopy<T>(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]; 
     } 
  }

Implémentation de la méthode aux limites.

private static void CheckBoundaries<T>(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();
            }
        }
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.