最快的算法,用于创建已知大小的数组

Sha*_*ica 3 c# algorithm

我需要创建一个布尔值数组,其范围可以是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)

或者也许第三种方式更快?

Dan*_*dor 5

使用a System.Collections.BitArray而不用担心速度.

你上面的建议只会浪费你的记忆.这样可以优化速度和大小,并且可以bool很好地打包你的值(每个字节8个,就像神的意图:).

回复以下评论:如果你使用a BitArray,一开始一切都将为零.仅设置您拥有的那些位GetValue == true.