当前位置:  开发笔记 > 编程语言 > 正文

是否有任何简单的方法来连接两个BitArray(C#.NET)?

如何解决《是否有任何简单的方法来连接两个BitArray(C#.NET)?》经验,为你挑选了2个好方法。

我有

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;

但它看起来不是最好的方法.



1> Erik Forbes..:

不幸的是,你的方法看起来可能和它一样好 - 如果BitArray实现IEnumerable (而不仅仅是IEnumerable),那么我们可以使用LINQ扩展方法使它更漂亮.

如果我是你,我会把它包装成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);
}


如果您知道第一个数组包含32位的偶数倍,则可以通过使用int数组而不是bool数组来显着优化它.CopyTo适用于int [],bool []和byte []

2> tuinstoel..:

Cast()在bitarray'变为' 后,可以使用LINQ执行此操作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方法会很快.

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有