Получить индексы положительных битов из массива битов

#asp.net #arrays

#asp.net #массивы

Вопрос:

Допустим, у меня есть следующий BitArray combinedResults = searchBitArray.И(genreBitArray);

Который содержит положительные биты, т. е. 100100110000

Как я могу получить индексы всех положительных битов?

Комментарии:

1. Как вам нужно использовать позиции битов позже? Можете ли вы привести пример типа результата, который вы хотели бы видеть, и что бы вы с ним сделали, учитывая предоставленный массив?

2. В принципе, я хочу найти все индексы положительных битов, поскольку они предоставляют индексы для поискового индекса, который у меня есть (Lucene.NET ). В принципе, тогда я хочу отобразить на экране все положительные индексы, поскольку это результаты поиска

3. Итак, что бы вы хотели получить обратно? Список<int>?

4. Это позволило бы обработать массив, а затем удалить все положительные биты ye

Ответ №1:

Вот первый, определенно гетто, способ взлома:

 BitArray ba = new BitArray(new bool[] {true,false,false,true,false,false,true,true,false,false,false,false});
List<int> pos = new List<int>();
for (int i = 0; i < ba.Length; i  )
{
    if (ba[i])
        pos.Add(i);
}
  

Это дало бы вам список, содержащий 0, 3, 6, 7. Вы могли бы начать с ba.Длина — 1 и уменьшаем до нуля, если вам нужно читать справа налево.

редактировать: Завернутый в метод расширения, просто потому, что:

 void Main()
{
    BitArray ba = new BitArray(new bool[] {true,false,false,true,false,false,true,true,false,false,false,false});

    List<int> positives = ba.GetBitPositions(true);
    List<int> negatives = ba.GetBitPositions(false);
}

public static class BitArrayExtensions
{
    public static List<int> GetBitPositions(this BitArray ba, bool MatchCondition)
    {
        List<int> pos = new List<int>();

        for (int i = 0; i < ba.Length; i  )
        {
            if (ba[i] == MatchCondition)
                pos.Add(i);
        }

        return pos;
    }
}