How do I smartly initialize an Array with two (or more) other arrays in C#?
double[] d1 = new double[5]; double[] d2 = new double[3]; double[] dTotal = new double[8]; // I need this to be {d1 then d2}
Another question: How do I concatenate C# arrays efficiently?
Array concatenation in C#
Asked Answered
If you have arrays that you need to change or mix and match like this, you should probably be use a generic List instead. –
Reprehension
possible duplicate of How do I concatenate two arrays in C#? –
Dahl
You could use 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);
Msdn is a little bit unclear, but the index parameter specifies the index in the destination array. –
Baro
You need d1.length - 1, I believe –
Leucocratic
You're right; I misunderstood. Sorry. @Rubys: No, you don't. –
Photooffset
First I copy 5 doubles from d1 to dTotal. Then I copy d2 to dTotal starting in index 5. If I use
d1.Lenght - 1
I'll start at index 4 and I'll lost the last value of d1. –
Baro var dTotal = d1.Concat(d2).ToArray();
You could probably make it 'better' by creating dTotal first, and then just copying both inputs with Array.Copy
.
This will be inefficient for large arrays. –
Photooffset
@SLaks: That's why I added the little extra bit, but even for meduim size arrays (up to 10000 elements), you would probably not even notice the difference. Also Enumerable may provide a fast option for
Concat
if both are arrays (will have to look at source to confirm). Update: It does NOT have a fast option for anything. –
Demarco You need to call Array.Copy
, like this:
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);
using System.Linq;
int[] array1 = { 1, 3, 5 };
int[] array2 = { 0, 2, 4 };
// Concat array1 and array2.
var result1 = array1.Concat(array2).ToArray();
© 2022 - 2024 — McMap. All rights reserved.