是否有任何简单的方法来连接两个BitArray(C#.NET)?
我有
var previous = new BitArray(new bool[]{true}); var current = new BitArray(new bool[]{false});
我想连接它们。 我已经尝试过了:
var next = new BitArray(previous.Count + current.Count); var index = 0; for(;index < previous.Count; index++) next[index] = previous[index]; var j = 0; for(;index < next.Count; index++, j++) next[index] = current[j]; previous = current;
但它看起来不是最好的方法。
不幸的是,看起来你的方法可能和它一样好 – 如果BitArray实现了IEnumerable
如果我是你,我会把它包装成BitArray上的扩展方法:
public static BitArray Prepend(this BitArray current, BitArray before) { var bools = new bool[current.Count + before.Count]; before.CopyTo(bools, 0); current.CopyTo(bools, before.Count); return new BitArray(bools); } public static BitArray Append(this BitArray current, BitArray after) { var bools = new bool[current.Count + after.Count]; current.CopyTo(bools, 0); after.CopyTo(bools, current.Count); return new BitArray(bools); }
可以使用LINQ执行此操作,在Cast
,bitarray’变为’ IEnumerable
:
var previous = new BitArray(new bool[] { true }); var current = new BitArray(new bool[] { false }); BitArray newBitArray = new BitArray(previous.Cast().Concat(current.Cast ()).ToArray());
我认为这种LINQ方法不会很快。
该框架没有提供这样做的好方法。 您可以创建一个足够大的bool数组来存储两个BitArrays。 然后使用BitArray.CopyTo复制bool数组中的每个BitArray(您可以指定从哪里开始插入元素)。
完成此操作后,使用接受bool数组的构造函数创建另一个BitArray。
我知道很多工作,但似乎没有其他办法。 然而,它比当前方法的代码少。
这是我的LINQ实现,它不包括必须分配bool数组的开销:
var result = new BitArray(first.Count + second.Count); var i = 0; foreach (var value in first.Cast().Concat(second.Cast ())) { result[i++] = value; }
如果使用int32而不是bools,则效率更高,因为bitarray在内部使用int32。
public static BitArray Append(this BitArray current, BitArray after) { var ints = new int[(current.Count + after.Count) / 32]; current.CopyTo(ints, 0); after.CopyTo(ints, current.Count / 32); return new BitArray(ints); }
在Vb.net中,如果有人需要它:
_ Public Function Append(ByVal current As BitArray, ByVal after As BitArray) As BitArray Dim ints = New Int32((current.Count + after.Count) \ 32 - 1) {} current.CopyTo(ints, 0) after.CopyTo(ints, current.Count \ 32) Return New BitArray(ints) End Function