用多个一维数组初始化多维数组的C#方法

4

我想初始化一个二维数组,使用两个已存在的一维数组。显然,如果我们知道这些数组的值,我们可以像这样初始化:

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。


你知道在编译时会有多少像a、b这样的数组吗?你不能进行这样的赋值,但你可以使用循环来填充你的数组。 - Selman Genç
@Selman22 不,我从另一个函数接收 ab,它们的长度将是可变的(尽管 ab 的长度将相同)。如果可能的话,我想避免使用循环来填充。 - Daniel Simpkins
2个回答

5

您需要自己初始化数组。使用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);

请注意,您需要确保源数组的长度相同才能使此操作正常运行。

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];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接