162 votes

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

Comment puis-je copier une partie d'un tableau vers un autre tableau ?

Considérez que j'ai

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

Maintenant si je donne l'indice de début et l'indice de fin du tableau a il doit être copié dans un autre tableau.

Par exemple, si je donne l'indice de départ 1 et l'indice final 3, les éléments 2, 3, 4 devraient être copiés dans le nouveau tableau.

302voto

Marc Gravell Points 482669
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

19voto

Pontus Gagge Points 12950

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

Un système prétendument plus rapide La méthode d'extension d'extension est déc déc déc déc décrite ici .

6voto

bajran Points 496
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 une méthode Copy, qui copie l'élément d'un tableau vers un tableau b.

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

1voto

Appurist-PaulW Points 191

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

J'ai donc pensé que je pourrais ajouter cette information ici, au cas où quelqu'un d'autre chercherait comment faire une copie rangée comme réponse partielle à la question du redimensionnement d'un tableau.

Pour tous ceux qui trouvent cette question en cherchant la même chose que moi, c'est très simple :

Array.Resize<T>(ref arrayVariable, newSize);

donde T est le type, c'est-à-dire l'endroit où arrayVariable est déclaré :

T[] arrayVariable;

Cette méthode gère les contrôles de nullité, ainsi que le fait que newSize==oldSize n'a aucun effet, et bien sûr, elle gère silencieusement le cas où l'un des tableaux est plus long que l'autre.

Voir l'article de MSDN pour plus.

0voto

Hameed Syed Points 1201

Si vous souhaitez mettre en œuvre votre propre Array.Copy méthode.

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

Mise en œuvre de la méthode des 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();
            }
        }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X