当前位置:  开发笔记 > 编程语言 > 正文

当您不知道大小时,如何初始化二维数组

如何解决《当您不知道大小时,如何初始化二维数组》经验,为你挑选了1个好方法。

我有一个二维数组,我需要加载数据.我知道数据的宽度(22个值),但我不知道高度(估计大约4000个记录,但变量).

我声明如下:

float[,] _calibrationSet;
    ....
int calibrationRow = 0;
While (recordsToRead)
{
  for (int i = 0; i < SensorCount; i++)
   {
     _calibrationSet[calibrationRow, i] = calibrationArrayView.ReadFloat();
   }
   calibrationRow++;
}

这会导致NullReferenceException,所以当我尝试像这样初始化它时:

_calibrationSet = new float[,];

我得到一个"数组创建必须有数组大小或数组初始化程序."

谢谢,基思



1> Shog9..:

你不能使用数组.或者更确切地说,你需要选择一个大小,如果你最终需要更多,那么你将不得不分配一个新的,更大的数组,将数据从旧的数据复制到新的数组中,并继续像以前一样(直到你超过新的大小......)

通常,您会使用其中一个集合类 - ArrayList,List <>,LinkedList <>等 - 这取决于您正在寻找的内容; List将为您提供与我最初描述的最接近的内容,而LinkedList <>将避免频繁重新分配的问题(以较慢的访问和更大的内存使用为代价).

例:

List _calibrationSet = new List();

// ...

while (recordsToRead)
{
    float[] record = new float[SensorCount];
    for (int i = 0; i < SensorCount; i++)
    {
        record[i] = calibrationArrayView.ReadFloat();
    }
    _calibrationSet.Add(record);
}

// access later: _calibrationSet[record][sensor]

哦,值得注意的是(正如Grauenwolf所做的那样),我在这里所做的并没有给你提供与单个多维数组相同的内存结构 - 在引擎盖下,它是对其他数组的引用数组实际上持有数据.通过使重新分配更便宜,这可以加快构建阵列的速度,但是可以对访问速度(当然还有内存使用)产生影响.这对你来说是否是一个问题,很大程度上取决于你在加载后对数据的处理方式......以及是否有200条记录或200万条记录.

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有