Массив BitArrays фиксированной длины - PullRequest
3 голосов
/ 01 декабря 2010

У меня проблемы с BitArray.

Цель - смоделировать стек из 8 80-битных битовых массивов, пронумерованных от 0 до 7.

Мне просто нужно иметь доступ к ним по индексу, и поэтому я думаю, что мне будет достаточно простого массива.

При инициализации объекта BitArray мне нужно указать количество бит, которые он будет содержать, что дает мне

BitArray test = new BitArray(80);

Как сделать массив, зная, что мне нужно указать значение длины?

Я пробовал несколько вещей, например

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

но я всегда получаю сообщение об ошибке при попытке указать длину ...

Есть мысли?

Заранее спасибо

Ответы [ 3 ]

4 голосов
/ 01 декабря 2010

К сожалению, насколько мне известно, у фреймворка нет "канонического" шаблона инициализации массива.

Один из способов, используя 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 голосов
/ 01 декабря 2010

Сначала создайте свой массив 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;
0 голосов
/ 01 декабря 2010

Ну ...

Я наконец сделал это следующим образом:

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);
    }
}

Спасибо за ваши ответы, которые привели меня к этому решению, которое, кажется, работает для меня.

Хорошего дня, и еще раз, спасибо!

...