【问题标题】:C# Initializing a Multi-dimensional array with multiple 1D arraysC# 使用多个一维数组初始化多维数组
【发布时间】:2015-03-17 21:59:11
【问题描述】:

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

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 这样的数组吗?你不能做这样的分配,但你可以使用循环填充你的数组。
  • @Selman22 不,我从另一个函数收到ab,它们的长度是可变的(尽管ab 的长度彼此相同)。如果可能的话,我试图避免使用循环来填充。

标签: c# arrays multidimensional-array


【解决方案1】:

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

请注意,您必须保证源数组的长度相同才能正常工作。

【讨论】:

    【解决方案2】:
    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];
    

    【讨论】:

      猜你喜欢
      • 2011-04-03
      • 2015-02-26
      • 1970-01-01
      • 2014-05-11
      • 2015-08-01
      • 1970-01-01
      相关资源
      最近更新 更多