在BitArray数组中查找重复项

时间:2018-03-27 06:15:59

标签: c# duplicates bitarray

我有Bitarray数组(每个元素由128位组成),我想找到它的元素重复。
我试过这段代码:

     Bitarray [] bitsarr=//something;
     string g=//convert the array of bitarray to binary string
      int numOfBytes = g.Length / 8;
      byte[] bytes = new byte[numOfBytes];
      for (int i = 0; i < numOfBytes; ++i)
      {
          bytes[i] = Convert.ToByte(g.Substring(8 * i, 8), 2);
      }
      int[] bytesAsInts = bytes.Select(x => (int)x).ToArray();
      var dict = new Dictionary<int, int>();
      foreach (var num in bytesAsInts)
      {
          if (!dict.ContainsKey(num))
          {
              dict.Add(num, 0);
          }
          dict[num]++;
      }

      foreach (var kvp in dict)
      {
          Console.WriteLine("{0} repeats {1} times", kvp.Key, kvp.Value);
      }

但我不想将其转换为int,因为结果将是假的 我想知道bitarray数组的每个元素的重复。
有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

您可以尝试在MSDN上使用BitArray.Xor(BitArray)查找重复项:

  

如果只有一个操作数为真,则按位异或操作返回true,如果两个操作数具有相同的布尔值,则返回false

在XOR操作之后,您可以检查BitArray中的所有位是否为假:

public static class Extensions
{
    public static bool IsAllFalse(this BitArray bitArray)
    {
        for (int i = 0; i < bitArray.Length; i++)
        {
            if (bitArray[i] == true)
                return false;
        }
        return true;
    }
}

P.S。注意BitArray.Xor(BitArray)修改当前对象,在调用它之前保存BitArray对象中的值。