[StructLayout(LayoutKind.Sequential)]
public struct Demo
{
double X;
double Y;
}
var data = new Demo[128];
FillWithMeaningfulValues(data);
double[] doubles;
Copy(data, out doubles); // ?
如何將演示數組複製到雙精度數組中,而不必通過每個元素來對(...)進行復制?在C++中,我會使用memcpy,但在C#中,我沒有在Marshal.Copy中找到需要的東西。C#將結構數組複製到雙精度數組
void MethodIDoNotWantToUse(Demo[] demo, out double[] doubles)
{
doubles = new double[demo.Length * 2];
for(int i = 0, j = 0; i < demo.Length; ++i)
{
doubles[j++] = demo[i].X;
doubles[j++] = demo[i].Y;
}
}
void MethodIWouldPreferToUse(Demo[] demo, out double[] doubles)
{
doubles = new double[demo.Length * 2];
memcopy(doubles, demo, demo.Length * 2 * sizeof(double));
}
您可以使用簡單的LINQ查詢達到的效果:'雙[] =雙打data.SelectMany(d =>新[ ] {dX,dY})。ToArray();'。 –
@UlugbekUmirov儘管如此,它仍然會逐個遍歷它們。他試圖一次複製整個街區。 –
@TimGoodman您說得對,但如果只有128個元素,我不會看到大量複製的性能優勢。 –