【问题标题】:C# - float[][] declarationC# - float[][] 声明
【发布时间】:2017-07-20 12:52:17
【问题描述】:

我正在尝试声明这种变量:

float[][]

对我不起作用的东西(无法编译)-

float[][] inputs = new float[10][5];
float[][] inputs = new float[10,5];

当尝试像这样声明数组时 -

int a = 3;
int b = 2;
float[][] inputs = new float[][]
{
   new float[a],
   new float[b]
};

我得到一个包含两个浮点数组的多维数组,而不是一个包含 3 个数组且每个数组大小为 2 的数组。

【问题讨论】:

标签: c# multidimensional-array


【解决方案1】:

嗯,有两种不同的类型:

  • 数组数组(锯齿状数组):

    float[][] sample = new float[][] {
      new float[] {1, 2, 3},
      new float[] {4, 5}, // notice that lines are not necessary of the same length
    };
    
  • 二维数组:

    float[,] sample2 = new float[,] {
      {1, 2, 3},
      {4, 5, 6},
    };
    

编辑:您的代码已修改:

  // jagged array (10 arrays each of which has 5 items)
  float[][] inputs = new float[10][] {
    new float[5],
    new float[5],
    new float[5],
    new float[5],
    new float[5],
    new float[5],
    new float[5],
    new float[5],
    new float[5],
    new float[5],
  };

您可以在 Linq 的帮助下缩短声明:

  float[][] inputs = Enumerable
    .Range(0, 10)               // 10 items
    .Select(i => new float[5])  // each of which is 5 items array of float
    .ToArray();                 // materialized as array

或者在二维数组的情况下

  // 2d array 10x5
  float[,] inputs = new float[10,5];

【讨论】:

  • 您的(修改后的)初始化代码是否比使用循环更有效率?例如。 for (var idx = 0; idx < a; idx++) input[idx] = new float[b];?
  • @JHBonarius:如果允许 building 数组,那么您可以提出一个 loop 解决方案(就像您所做的那样),但是,当需要声明时,例如private float[][] inputs = ? 你不能使用循环。
  • 您能否详细说明“构建阵列”?我不知道这个概念......我一直在我的代码中使用循环,作为一个高性能的数学应用程序,我想优化。编辑:也许我应该在 [cr] 中问一个问题
  • @:J.H.Bonarius 你不能在循环的帮助下声明一个数组(比如一个类中的field):private float[][] inputs = /* no loops here*/。但是,如果您被允许将该字段声明为 float[][] inputs = new float[10][]; 并且仅在此之后(在构造函数中)构建数组:public MyClass() {/* you can use loops within a method/constructor */} 循环是一个很好的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-02
  • 2016-10-09
  • 2012-12-14
  • 2019-01-20
  • 2011-06-22
  • 2022-01-13
相关资源
最近更新 更多