有效地比较两个相同长度的BitArray

时间:2011-01-13 05:34:40

标签: c#

我该怎么做?我想在两个数组在同一索引处具有相同的TRUE / 1值时进行计数。正如您所看到的,我的代码有多个bitarrays并循环遍历每个bitarray并将它们与comparisonArray与另一个循环进行比较。它看起来效率不高,我需要它。

foreach (bitArrayTuple in bitarryList) { 
    for (int i = 0; i < arrayLength; i++)
        if (bArrayTuple.Item2[i] && comparisonArray[i])
            bitArrayTuple.Item1++;
}

其中Item1是计数,Item2是bitarray。

4 个答案:

答案 0 :(得分:2)

没有太多方法可以做到这一点,因为BitArray不会让其内部数组泄漏,并且因为.NET没有C ++等效的const来防止外部修改。您可能想要从头开始创建自己的类,或者,如果您想要黑客攻击,请使用反射来获取BitArray内的私有字段。

答案 1 :(得分:2)

这会有用吗?

http://msdn.microsoft.com/en-us/library/system.collections.bitarray.and%28v=VS.90%29.aspx

就像单身&amp; C中的运算符。

答案 2 :(得分:1)

根据元素的数量,BitVector32可能是可用的。那只是Int32比较。

如果无法实现,您需要抓住位于每个int[]的{​​{1}}私有字段中的m_array。然后比较每个BitArray(一次比较32位)。

答案 3 :(得分:0)

bool equals = ba1.Xor(ba2).OfType<bool>().All(e => !e);