J'ai opté pour une solution plus générale qui permet de concaténer un ensemble arbitraire de tableaux unidimensionnels du même type. (Je concaténais 3+ tableaux à la fois).
Ma fonction :
public static T[] ConcatArrays<T>(params T[][] list)
{
var result = new T[list.Sum(a => a.Length)];
int offset = 0;
for (int x = 0; x < list.Length; x++)
{
list[x].CopyTo(result, offset);
offset += list[x].Length;
}
return result;
}
Et l'usage :
int[] a = new int[] { 1, 2, 3 };
int[] b = new int[] { 4, 5, 6 };
int[] c = new int[] { 7, 8 };
var y = ConcatArrays(a, b, c); //Results in int[] {1,2,3,4,5,6,7,8}
8 votes
Que voulez-vous dire par "efficace" ? Le code est assez court comme ça, donc je suppose que vous voulez dire efficace en termes de CPU/RAM ?
4 votes
Non, un rapide coup d'œil à Reflector montre qu'il utilise un double tampon quand il est plein.
0 votes
Pour être clair, j'ai besoin que z soit de type int[].
5 votes
Je ne suis pas vraiment préoccupé par l'efficacité. (J'ai bien dit plus facile ou plus efficace). J'ai posé la question pour vérifier comment les autres personnes géraient cette tâche commune.