Linq. быстрая проверка элемента на то имеет ли он в определенном бите единицу - C#
Формулировка задачи:
Тяжело сформулировать кратко. Есть запрос к датасету:
IEnumerable<int> docnumber = (from s in dataset.proc
where containinnumber(s.ItemArray.ElementAt(27), current_rights)
select Convert.ToInt32(s.ItemArray.ElementAt(0))).ToArray().OrderByDescending(s => s);
функция containinnumber выглядит следующим образом
private bool containinnumber(object number, int rights)
{
try
{
if (Convert.ToString(Convert.ToInt32(number), 2).ElementAt(rights - 1) == '1') return true;
else return false;
}
catch { return false; }
}
Что я делаю? пытаюсь достать коллекцию номеров, для которых в ElementAt(27) (является object-ом, в бд int) в бите под номером current_rights стоит 1.
То есть есть строка в которой в 27 позиции число 5, то его я представляю в двоичной форме 101, и смотрю есть ли на позиции current_rights(например 2) единица.
Работает достаточно долго для 5000 записей. есть идеи как ускорить проверку?
Решение задачи: «Linq. быстрая проверка элемента на то имеет ли он в определенном бите единицу»
textual
Листинг программы
if (((int)number & (1 << rights)) != 0)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д