固定长度的Bit数组的数组

3
我遇到了一个BitArray的问题。
目标是模拟一个由0到7编号的8个80位BitArrays的堆栈。
我只需要通过索引来访问它们,因此我认为一个简单的数组就足够了。
在初始化BitArray对象时,我需要指定它将包含的位数,这会给我
BitArray test = new BitArray(80);

如何创建一个数组,并指定其长度?

我尝试了几种方法,例如:

BitArray[] stack = new BitArray(80)[];

但是每次在尝试给它长度时,我总是会遇到错误... 有什么想法吗?提前感谢。
3个回答

4

很遗憾,就我所知,该框架似乎没有“规范”的数组初始化模式。

一种方法是使用LINQ:

var stack = Enumerable.Range(0, 8)
                      .Select(i => new BitArray(80))
                      .ToArray();

或者:

var stack = Enumerable.Repeat<Func<BitArray>>( () => new BitArray(80), 8)
                      .Select(f => f())
                      .ToArray();

或者,

BitArray[] stack = new BitArray[8];

for(int i = 0; i < stack.Length; i++)
   stack[i] = new BitArray(80);

2

首先按照以下方式创建你的BitArray数组([]):

BitArray[] stack = new BitArray[8];

然后在for循环中初始化所有单独的位数组(类似这样):

foreach (BitArray arr in stack)
{
    arr = new BitArray(80);
}

编辑:像这样的内容更多是一个指针,而不是实际测试;以下是:

BitArray[] stack = new BitArray[8];
for(int i=0;i<stack.Length;i++)
{
    stack[i] = new BitArray(80);
}
stack[0][0] = true;

这样做行不通。每个实例 arr 都会导致 NullReferenceException。你需要使用 for 循环和类似 stack[n] = new BitArray(80); 的代码来设置单个数组成员。 - Sedat Kapanoglu
很遗憾,在这里使用foreach循环数组是没有意义的。 - Ani
我说过“大概是这样”... 没有测试过,只是指出了一个解决方案。楼主想要将两者结合起来 - 这是行不通的。 - riffnl
1
嗯?我不会在这里出现异常,它只是不会任何事情。效果是,每次循环时,'arr'会引用数组的一个元素,然后指向新的BitArray(而不影响数组)。 - Karl Knechtel
我认为它不会编译通过,因为foreach循环中的循环变量是只读的,不是吗? - Ani

-1

嗯...

最终我是这样做的:

List<BitArray> stack = new List<BitArray>(8);

public FPU()
{
    //initialise the stack

    for (int i = 0; i < stack.Capacity; i++)
    {
        stack[i] = new BitArray(80);
    }
}

感谢您的回答,这让我找到了解决方案,似乎对我有效。

祝您有美好的一天,再次感谢!


1
最好使用Count而不是Capacity。 - Henrik
是的,在测试时注意到了。我已经用一个常量替换了堆栈计数,以增加灵活性。 - nrocha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接