VLookup в Datagridviews (VB.NET) - PullRequest
       18

VLookup в Datagridviews (VB.NET)

0 голосов
/ 07 октября 2009

У меня есть два вида данных (скажем, DGV-A и DGV-B), каждый из которых содержит только один столбец. Я хочу выяснить, существует ли элемент в DGV-A также в DGV-B. В основном, я ищу функцию VLookup, доступную в MS-Excel. Это можно сделать тривиально, перебирая шину по значениям в DGV-A и для каждой итерации DGV-A, перебирайте DGV-B и смотрите, существует ли он там (прерывая итерацию DGV-B, как только мы нашли элемент существует). Это необходимо сделать для всех предметов в DGV-A. И поскольку мои DGV потенциально могут содержать около 200 элементов (например, если DGV содержит по 200 элементов каждый, в худшем случае я буду делать 200 * 200 = 40000 сравнений) в каждом просмотре сетки данных, я боюсь, это не будет быстрым.

Есть ли способ / алгоритм, чтобы сделать это оптимальным способом. (У меня нет привязки данных или базы данных, поэтому использование SQL / DB-Engine не вариант; мои данные в DGV генерируются программно на лету на основе действий пользователя)

1 Ответ

1 голос
/ 07 октября 2009

Как правило, не стоит оптимизировать код для повышения производительности, пока вы не узнаете, что у вас действительно есть проблемы с производительностью. Но в этом случае я бы также использовал другое решение, чтобы избежать операции O(n * m).

Я предлагаю вставить все элементы из одного списка в хэш-набор - это будет O(n), если вы укажете достаточно большой начальный размер и не будете изменять размер хэш-набора таким образом. Затем просто выполните поиск в хэш-наборе для каждого элемента во втором списке в O(m). Таким образом, вы получаете O(n * m) до O(n + m).

...