我有一个System.Collections.BitArray数组(~3000项),我想将所有位向左移动1.然而,该集合似乎不支持该操作(即bitArray<< 1不工作,没有方法)。关于如何做到这一点的任何想法?
谢谢!
答案 0 :(得分:4)
这个简单的代码段显示了一种手动方式。 bitArray[0]
的值将被覆盖:
//... bitArray is the BitArray instance
for (int i = 1; i < bitArray.Count; i++)
{
bitArray[i - 1] = bitArray[i];
}
bitArray[bitArray.Count - 1] = false // or true, whatever you want to shift in
使这个扩展方法不应该是一个大问题。
答案 1 :(得分:2)
System.Numerics.BigInteger确实支持位移。
答案 2 :(得分:1)
我不确定效率如何,但这种扩展方法可以完成这项工作
public static BitArray ShiftRight(this BitArray instance)
{
return new BitArray(new bool[] { false }.Concat(instance.Cast<bool>().Take(instance.Length - 1)).ToArray());
}
答案 3 :(得分:1)
重新创建bitarray作为ulong[]
的包装器;通过小于64的数字来实现位移是一块蛋糕,这将比其他建议的方法花费更少的时间并且杀死更少的北极熊。通过警惕“可能会落到最后的位”,如果你想保留它们,你可能需要增长数组(或者不是,如果它们为零,你说不存在的元素隐含地保持为零)。
答案 4 :(得分:0)
最简单的方法是将BitArray转换为支持按位移位和返回的BigInt或类似结构。现在,.Net 4中的内置BigInteger不支持我认为的转变,但还有其他一些,如Mono的实现。