最有效的方法来颠倒BitArray的顺序?

Chr*_*her 8 c# bitarray

我一直想知道在C#中反转BitArray顺序的最有效方法是什么.要清楚,我不想通过调用.Not()来反转Bitarray,我想要反转数组中位的顺序.

干杯,克里斯

Tim*_*oyd 28

public void Reverse(BitArray array)
{
    int length = array.Length;
    int mid = (length / 2);

    for (int i = 0; i < mid; i++)
    {
        bool bit = array[i];
        array[i] = array[length - i - 1];
        array[length - i - 1] = bit;
    }    
}
Run Code Online (Sandbox Code Playgroud)

  • @codekaizen欢呼 - 我可以看到死的问题:) (5认同)

Hen*_*man 7

对于长数组和相对较少的用途,只需将其包装:

    class BitArrayReverse
    {
        private BitArray _ba;

        public BitArrayReverse(BitArray ba) { _ba = ba; }

        public bool this[int index]
        {
            get { return _ba[_ba.Length - 1 - index]; }
            set { _ba[_ba.Length - 1 - index] = value; }
        }

    }
Run Code Online (Sandbox Code Playgroud)


fmD*_*eam 6

这将是在 for 循环中使用 XOR 反转任何长度的 MSB <-> LSB 的最佳方法

public static BitArray BitsReverse(BitArray bits)
{
    int len = bits.Count;
    BitArray a = new BitArray(bits);
    BitArray b = new BitArray(bits);

    for (int i = 0, j = len-1; i < len; ++i, --j)
    {
         a[i] = a[i] ^ b[j];
         b[j] = a[i] ^ b[j];
         a[i] = a[i] ^ b[j];
    }

    return a; 
} 
// in   010000011010000011100b
// out  001110000010110000010b
Run Code Online (Sandbox Code Playgroud)