我有2个datagridviews(例如,DGV-A和DGV-B),每个只有一列。 我想知道DGV-A中的项目是否也存在于DGV-B中。基本上,我正在寻找MS-Excel中提供的VLookup功能。 这可以简单地完成,总线迭代DGV-A中的值和DGV-A的每次迭代,迭代DGV-B并查看它是否存在(一旦我们找到项目就中止DGV-B的迭代)存在)。 需要对DGV-A中的所有项目进行此操作。而且因为我的DGV可能有大约200个项目(例如,如果DGV每个包含200个项目,最坏的情况下,我会在每个数据网格中进行200 * 200 = 40000比较),我担心,它不会很快。 / p>
有没有办法/算法以最佳方式完成它。 (我没有任何数据绑定或数据库,因此不能使用SQL / DB-Engine;我的DGV中的数据是根据用户操作动态生成的)
答案 0 :(得分:1)
在您知道自己确实存在性能问题之前,优化代码以提高性能通常不是一个好主意。但在这种情况下,我也会使用另一种解决方案来避免O(n * m)
操作。
我建议将一个列表中的所有项目插入到哈希集中 - 如果您指定了足够大的初始大小并且避免以这种方式调整哈希集的大小,那么这将是O(n)
。然后,只需在O(m)
的第二个列表中的每个项目的哈希集中查找。这样,您可以将O(n * m)
降为O(n + m)
。