一尘不染

比较两个数据表以确定其中一个而不是另一个的行

c#

我有两个由CSV文件生成的DataTable AB。我需要能够检查中B不存在的行A

有没有一种方法可以执行某种查询以显示不同的行,或者我必须遍历每个DataTable的每一行以检查它们是否相同?如果表变大,后一种选择似乎非常密集。


阅读 207

收藏
2020-05-19

共1个答案

一尘不染

我必须遍历每个DataTable的每一行以检查它们是否相同。

从CSV文件中加载数据后,您将不会有任何索引或任何内容,因此在某些时候,无论是代码还是库,都需要遍历每一行。 , 管他呢。

无论如何,这是一个算法问题,这不是我的专长,但是我的幼稚方法如下:

1:您可以利用数据的任何属性吗?每个表中的所有行是否都是唯一的,是否可以按照相同的条件对它们进行排序?如果是这样,您可以这样做:

  • 通过两个表的ID对它们进行排序(使用一些有用的东西,例如快速排序)。如果它们已经被排序,那么您赢了很多。
  • 一次浏览两个表,跳过两个表中ID的任何空白。匹配ID的平均重复记录。

这使您可以在(排序时间* 2)+一遍中进行操作,因此,如果我的big-O表示法正确,那么它将是(whatever-sort-time)+ O(m +
n),这非常好。
(修订:这是ΤΖΩΤΤΙΙΟΥ描述的方法)

2:一种替代方法,其效率或多或少取决于您的数据量:

  • 遍历表1,对于每一行,将其ID(或计算出的哈希码,或该行的某些其他唯一ID)粘贴到字典(或哈希表,如果您愿意称呼它)中。
  • 遍历表2,并针对每一行,查看字典中是否存在ID(或哈希码等)。您正在利用字典速度非常快的事实-我认为O(1)吗?抬头。这一步确实非常快,但是您需要为所有这些字典插入付出代价。

我真的很想知道哪些人比我更了解算法,所以提出了一个:-)

2020-05-19