【发布时间】:2013-07-07 19:00:21
【问题描述】:
我有一个大长度的整数数组。例如。 {2, 3, 4, 2, 4, 2, 1, 4, ....}。 我想将其转换为 C# 中的 BitArrays 数组。 那是, 010 011 100 010 100 010 001 100
所以这可以变成3个BitArrays(最左边的bitarray,中间位的bitarray,最右边的bitarray)
这里的问题是,与java中可以直接存储0/1的bitset不同,bitarrays只能包含true/false。而且由于这个数组非常长,我不想用if/else,也就是
for(int i=0; i<N; i++)
if (bit is 0) then // time consuming step
leftMostbitArray[0] = false;
else
leftMostbitArray[0] = true;
有什么解决方法可以让我摆脱这一步吗?或者可能是不同的数据结构。由于大小限制,我不想使用 BitVector32。
谢谢。
【问题讨论】:
-
您的问题含糊不清。你想每个整数返回一个 BitArray,还是只返回 3 个 BitArray,每个位位置一个(假设每个整数都是 0..7)?
-
另外,你有没有分析过你的代码,或者你只是猜测 if/else 块会很慢?
-
@MichaelBray 3 位数组。所以第一个位数组将具有所有整数的最左边位。从上面的例子中,leftMostBitArray 应该有 00101001。MiddleBitArray 应该有 11010100,RightmostBitArray 应该有 01000010。
-
您可以使用
leftMostbitArray[0] = (bit is 0)代替您的 if/else(当然,正确实现“位为 0”)
标签: c#