У меня есть 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 - через алогритм, который я получил вне стека). Интересно, есть ли алгоритм для этого?