web-dev-qa-db-fra.com

Comment copier une partie d'un tableau sur 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 les index de début et de fin du tableau a, il devrait être copié dans un autre tableau.

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

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

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

Une soi-disant plus rapide la méthode d'extension est décrite ici .

17
Pontus Gagge
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, vous devez fournir le même type de données à un autre tableau que vous copiez.

2
bajran

Remarque: j'ai trouvé cette question à la recherche d'une des étapes de la réponse: comment 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 en guise de 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 contrôles nuls, ainsi que newSize == oldSize n’ayant aucun effet et, bien sûr, gère silencieusement le cas où l’une des baies est plus longue que l’autre.

Voir l'article MSDN pour plus d'informations.

1
Appurist - Paul W

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 Boundary.

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