2009-10-07 9 views
0

J'ai 2 datagridviews (disons, DGV-A et DGV-B) ayant une seule colonne chacune. Je souhaite savoir si l'élément de DGV-A existe également dans DGV-B. Fondamentalement, je suis à la recherche d'une fonction VLookup disponible dans MS-Excel. Cela peut être fait trivialement, bus itérer sur les valeurs dans DGV-A et pour chaque itération de DGV-A, itérer sur DGV-B et voir si elle existe là (avorter itération de DGV-B dès que nous avons trouvé le article existe). Ceci doit être fait pour tous les éléments de DGV-A. Et parce que mes DGV pourraient potentiellement avoir environ 200 items (par exemple si DGV contient 200 items chacun, au pire, je ferais 200 * 200 = 40000 comparaisons) dans chaque datagridviews, je crains, ça ne va pas être rapide.VLookup dans Datagridviews (VB.NET)

Existe-t-il un moyen ou un algorithme de le faire de manière optimale? (Je n'ai pas de liaison de données ou de base de données, donc l'utilisation de SQL/DB-Engine n'est pas une option, mes données dans DGV sont générées par programmation à la volée en fonction des actions de l'utilisateur)

Répondre

1

idée d'optimiser le code pour la performance jusqu'à ce que vous sachiez que vous avez vraiment des problèmes de performance. Mais dans ce cas j'utiliserais une autre solution, aussi, pour éviter une opération O(n * m).

Je suggère d'insérer tous les éléments d'une liste dans un ensemble de hachage - ce sera O(n) si vous spécifiez une taille initiale suffisamment grande et évitez de redimensionner le hachage de cette façon. Ensuite, effectuez une recherche dans le jeu de hachage pour chaque élément de la deuxième liste en O(m). De cette façon, vous obtenez O(n * m) jusqu'à O(n + m).