C#初始化具有多个1D阵列的多维数组

时间:2015-03-17 21:59:12

标签: c# arrays multidimensional-array

我正在尝试使用两个现有的1D数组初始化二维数组。显然,如果我们知道这些数组的值,我们可以像这样初始化它:

float[,] my2DArray = new float{{1,2}, {3,4}};

但是,如果我尝试用这样的变量初始化数组:

float[] a = {1,2};
float[] b = {3,4};
float[,] my2DArray = new float{a,b};

然后我收到错误“预期嵌套数组初始化程序。” 我猜这可能与编译器不知道数组的维度有关,因为它不会在运行时分配。

那么,有什么方法可以解决这个问题吗?我的目标是.NET 4.0。

2 个答案:

答案 0 :(得分:4)

您需要自己初始化阵列。使用Buffer.BlockCopy可以获得性能改进和更短的代码,但不能直接进行内联初始化:

float[] a = {1,2};
float[] b = {3,4};
float[,] my2DArray = new float[a.Length, 2];

int len = a.Length * sizeof(float);
Buffer.BlockCopy(a, 0, my2DArray, 0, len);
Buffer.BlockCopy(b, 0, my2DArray, len, len);

请注意,您必须保证源数组的长度相同才能生效。

答案 1 :(得分:0)

float[] a = { 1, 2 };
float[] b = { 3, 4 };

float[,] my2DArray = new float[a.Length, b.Length];

for (int i = 0; i < a.Length; i++)
    for (int j = 0; j < b.Length; j++) 
         my2DArray[i, j] = new float[][] { a, b }[i][j];