我有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数组的每个元素的重复。
有人可以帮忙吗?
答案 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对象中的值。