Количество поисковых запросов всегда будет во много раз превышать количество элементов в списке для поиска. Например, если в списке для поиска 5 элементов, мне, скорее всего, придется искать в этом списке 50 или более раз. Поисковые прогоны не будут последовательными. Другими словами, у меня есть функция, которая выполняет множество действий с объектом, частью которой является поиск. Функция вызывается неоднократно с разными объектами.
Количество совпадений для любого заданного поиска, скорее всего, будет равно нулю, но легко может быть больше одного. А мне нужны все спички. Функция, вызывающая поиск, не использует результаты; скорее это другая функция, обрабатывающая другие типы объектов, которые будут использовать результаты.
У меня есть такая структура данных:
Код: Выделить всё
MyDataClass:
ListToSearch ( (AcadEntID, Pt1, Pt2) (AcadEntID Pt1, Pt2) ...)
Results { AcadEntID : ( (RevitLineID, EndPtInx) (RevitLineID, EndPtInx) ...),
(RevitLineID, EndPtInx) (RevitLineID, EndPtInx) ...))
AcadEntID : ( (RevitLineID, EndPtInx) (RevitLineID, EndPtInx) ...),
(RevitLineID, EndPtInx) (RevitLineID, EndPtInx) ...))
}
Тест задает следующий запрос: Для каждого AcadEntID, находится ли PtA в рамке с центром в Pt1? Или это внутри рамки с центром в точке 2? Повторите для PtB. Каждая точка имеет значение X и Y.
Если это более эффективно, ListToSearch можно разбить на несколько частей, при этом каждая точка останется связанной с AcadEntID.
Эта программа разрабатывается в RevitPythonShell, но в конечном итоге станет частью надстройки PyRevit.
И вот она. Мне нужен очень быстрый способ многократного поиска в коротком списке.
С уважением;
Мишель
Подробнее здесь: https://stackoverflow.com/questions/790 ... r-of-times