使用除“0”以外的其他值作为默认值的Array.Resize最有效的方法?

时间:2011-01-09 17:05:32

标签: c# arrays memory-management floating-point resize

我想调整数组的大小,但我不希望所有附加的值都为零。

Array.Resize(ref range, range.Length + grow);

如果你假设附加的长度总是4个字节的倍数(刚好足以容纳一个浮点数),那么用float.MaxValuefloat.MinValue来填充它的最佳方法是什么? / p>

1 个答案:

答案 0 :(得分:3)

只需遍历添加的项目并为其指定值即可。编译器将生成代码,仅在循环外执行数组索引的范围检查,因此循环将非常有效。

int oldSize = range.Length;
Array.Resize(ref range, range.Length + grow);
for (int i = oldSize; i < range.Length; i++) {
  range[i] = float.MinValue;
}

您应该知道Array.Resize实际上并没有调整数组的大小,但它创建了一个具有所需大小的新数组,并从原始数组中复制数据。因此,如果您想要一种有效调整集合大小的方法,则根本不应该使用数组。根据您的需要,像List,数组列表或LinkedList可能会更好。