4
  1. Comment initialiser intelligemment un tableau avec deux (ou plus) autres tableaux en C#?Concaténation de tableau en C#

    double[] d1 = new double[5]; 
    double[] d2 = new double[3]; 
    double[] dTotal = new double[8]; // I need this to be {d1 then d2} 
    
  2. Une autre question: Comment puis-je concaténer C# tableaux de façon efficace?

+4

Si vous avez des tableaux que vous devez changer ou mélanger et assortir comme celui-ci, vous devriez probablement utiliser une liste générique à la place. –

+0

duplication possible de [Comment concaténer deux tableaux en C#?] (Http://stackoverflow.com/questions/1547252/how-do-i-concatenate-two-arrays-in-c) –

Répondre

9

Vous pouvez utiliser CopyTo:

double[] d1 = new double[5]; 
double[] d2 = new double[3]; 
double[] dTotal = new double[d1.Length + d2.Length]; 

d1.CopyTo(dTotal, 0); 
d2.CopyTo(dTotal, d1.Length); 
+0

Msdn est un peu flou, mais le paramètre index spécifie l'index dans le tableau de destination. –

+0

Vous avez besoin d1.length - 1, je crois – Rubys

+0

Vous avez raison; J'ai mal compris. Pardon. @Rubys: Non, vous ne le faites pas. – SLaks

5
var dTotal = d1.Concat(d2).ToArray(); 

Vous pourriez probablement faire « mieux » en créant dtotal d'abord, puis simplement copier les deux entrées avec Array.Copy.

+1

Ceci sera inefficace pour grands tableaux. – SLaks

+0

@SLaks: C'est pourquoi j'ai ajouté le petit peu supplémentaire, mais même pour les tableaux de taille meduim (jusqu'à 10000 éléments), vous ne remarquerez probablement pas la différence. Aussi Enumerable peut fournir une option rapide pour 'Concat' si les deux sont des tableaux (il faudra regarder la source pour confirmer). Mise à jour: Il n'a pas une option rapide pour n'importe quoi. – leppie

+0

C'est génial car cela fonctionne aussi dans les initialiseurs. – tim

3

Vous devez appeler Array.Copy, comme ceci:

double[] d1 = new double[5]; 
double[] d2 = new double[3]; 
double[] dTotal = new double[d1.length + d2.length]; 

Array.Copy(d1, 0, dTotal, 0, d1.Length); 
Array.Copy(d2, 0, dTotal, d1.Length, d2.Length); 
0
using System.Linq; 

int[] array1 = { 1, 3, 5 }; 
int[] array2 = { 0, 2, 4 }; 

// Concat array1 and array2. 
var result1 = array1.Concat(array2).ToArray();