Индекс положительных битов битового массива C #

У меня есть BitArray c # довольно большой (500 000) длины, и я пытаюсь получить индекс всех положительных битов, установленных в массиве. в настоящее время я добиваюсь этого следующим образом:

public int[] GetIndexesForPositives()
{
    var idIndexes = new int[GetPositiveCount + 1];
    var idx = 0;
    for (var i = 0; i < Length; i++)
        {
            if (Get(i))
            {
                idIndexes[idx++] = i;
            }
        }
    return idIndexes;
}

Я создаю пустой массив с размером известных положительных битов, затем перебираю битовый массив и добавляю значение индекса в возвращаемый массив.

Это означает, что мне нужно выполнить 500 000 циклов по массиву, и это не совсем быстро. (занимает около 15 мс).

Я знаю, что BitArray использует целочисленный массив под крышками (я использовал его для написания функции GetPositiveCount - через алогритм, который я получил вне стека). Интересно, есть ли алгоритм для этого?

6
задан AaronHS 14 September 2011 в 09:54
поделиться