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