我需要创建一个布尔值数组,其范围可以是100,000s甚至数百万条.它还需要超快,因此每次迭代的每毫秒都很重要.
在开始循环时,我已经知道数组中将有多少条目.问题是,预先创建一个bool数组并通过索引填写值会更快(这是随机访问 - 可能会很慢吗?),或者我应该创建一个List<bool>,继续向列表中添加条目,以及结束回归.ToArray()?
换一种说法:
选项1
var array = new bool[size];
for (var n=0; n<size; n++)
array[n] = GetValue(n);
return array;
Run Code Online (Sandbox Code Playgroud)
选项2
var list = new List<bool>();
for (var n=0; n<size; n++)
list.Add(GetValue(n));
return list.ToArray();
Run Code Online (Sandbox Code Playgroud)
或者也许第三种方式更快?
使用a System.Collections.BitArray而不用担心速度.
你上面的建议只会浪费你的记忆.这样可以优化速度和大小,并且可以bool很好地打包你的值(每个字节8个,就像神的意图:).
回复以下评论:如果你使用a BitArray,一开始一切都将为零.仅设置您拥有的那些位GetValue == true.
| 归档时间: |
|
| 查看次数: |
248 次 |
| 最近记录: |