【发布时间】:2011-07-01 02:16:56
【问题描述】:
我正在实现一个库,我在其中广泛使用 .Net BitArray 类,并且需要与 Java BitSet.Cardinality() 方法等效的方法,即返回设置的位数的方法。我正在考虑将它实现为 BitArray 类的扩展方法。简单的实现是迭代和计算位集合(如下所示),但我想要一个更快的实现,因为我将执行数千个集合操作并计算答案。有没有比下面的例子更快的方法?
count = 0;
for (int i = 0; i < mybitarray.Length; i++)
{
if (mybitarray [i])
count++;
}
【问题讨论】:
-
作为旁注,我将补充一点,从 Mono 中获取 BitArray 代码并添加 O(1) 的基数是新手级编程。 (类库在 X11 许可下,这是一个非常非常宽松的许可)
-
有趣的建议。源代码不会在 C 中吗?在这种情况下,我需要让我的图书馆不受损坏?也请您指出我在 github 上的正确路径吗?
-
不不... 95%(它是一个随机数)框架库(和单声道库)是用 C#(纯 C#,而不是 C# + 托管 C++)编写的。只有最低级别的东西是用 C(或其他东西)编写的(我没有注意到你问过我......你(和我,因为 50% 的时间我忘记了)应该记住@name 你想要的人写信给:-))