Kei*_*ons 8 c# array-initialize
我有一个二维数组,我需要加载数据.我知道数据的宽度(22个值),但我不知道高度(估计大约4000个记录,但变量).
我声明如下:
float[,] _calibrationSet;
....
int calibrationRow = 0;
While (recordsToRead)
{
for (int i = 0; i < SensorCount; i++)
{
_calibrationSet[calibrationRow, i] = calibrationArrayView.ReadFloat();
}
calibrationRow++;
}
Run Code Online (Sandbox Code Playgroud)
这会导致NullReferenceException,所以当我尝试像这样初始化它时:
_calibrationSet = new float[,];
Run Code Online (Sandbox Code Playgroud)
我得到一个"数组创建必须有数组大小或数组初始化程序."
谢谢,基思
你不能使用数组.或者更确切地说,你需要选择一个大小,如果你最终需要更多,那么你将不得不分配一个新的,更大的数组,将数据从旧的数据复制到新的数组中,并继续像以前一样(直到你超过新的大小......)
通常,您会使用其中一个集合类 - ArrayList,List <>,LinkedList <>等 - 这取决于您正在寻找的内容; List将为您提供与我最初描述的最接近的内容,而LinkedList <>将避免频繁重新分配的问题(以较慢的访问和更大的内存使用为代价).
例:
List<float[]> _calibrationSet = new List<float[]>();
// ...
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]
Run Code Online (Sandbox Code Playgroud)
哦,值得注意的是(正如Grauenwolf所做的那样),我在这里所做的并没有给你提供与单个多维数组相同的内存结构 - 在引擎盖下,它是对其他数组的引用数组实际上持有数据.通过使重新分配更便宜,这可以加快构建阵列的速度,但是可以对访问速度(当然还有内存使用)产生影响.这对你来说是否是一个问题,很大程度上取决于你在加载后对数据的处理方式......以及是否有200条记录或200万条记录.
归档时间: |
|
查看次数: |
15105 次 |
最近记录: |