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