【发布时间】:2012-05-16 02:07:58
【问题描述】:
我有两个数组要在多个级别上进行比较。两者具有相同的结构,具有 3 个“列。
第一列包含多边形的 ID,第二列是区域类型,第三列是多边形的每种区域类型的百分比。
因此,对于许多行,它将比较,例如 ID : 1 Type : aaa % : 100 但是对于某些元素,我有很多行具有相同的 ID。例如,我将有 ID 2,类型 aaa,25% --- ID 2,类型 bbb,25% --- ID 2,类型 ccc,50%。在第二个数组中,我将有 ID 2,类型 aaa,25% --- ID 2,类型 bbb,10% --- ID 2,类型 eee,38% --- ID 2,类型 fff,27 %。
这是一个视觉示例..
所以,我的函数必须比较这两个数组,如果有差异,请给我发送电子邮件。 (我不会向你展示真正的代码,因为有 811 行)。第一个“if”条件是
if array1.id = array2.id Then
if array1.type = array2.type Then
if array1.percent = array2.percent Then
zone_verification = True
Else
zone_verification = False
问题是因为每个数组中有超过 50 000 行。因此,当我运行该函数时,对于每个“array1.id”,该函数在 array2 中搜索 50 000 行。 50 000 次搜索 50 000 行.. 运行时间相当长!
我正在寻找让它运行得更快的东西。我怎样才能让我的搜索更具体。示例:我在 array1 中有很多 id "2"。如果array2中有许多id“2”,找到它,并将所有array2.id = 3推入“子数组”或类似的东西,并在这些特定行中搜索。所以我将在array1中只有X行与array 2中的X行进行比较,而不是50 000。当array1中的每个“id 2”完成时,对“id 4”做同样的事情......和“ id 5"...
希望很清楚。这几乎是我第一次使用 VB.net,而且我有这么大的功能可以运行。
谢谢
编辑
这就是我想做的。
我在地理空间数据库中有两个不同的层。两层具有相同的结构。它们是地块 (55 000) 和土地利用层的“空间连接”。第一层是当前层,第二层是我们将在 2015 年之后使用的下一层。
所以我有,对于每个“地块”,每个土地使用的百分比。因此,对于“地块”(ID 7580-80-2532),我可以拥有 50% 的农业使用(TYPE FAR-23)和 50% 的住宅使用(RES-112)。在第一个数组中,我'将有 2 行具有相同的 ID (7580-80-2532),但每一行都有不同的类型 (FAR-23、RES-112) 和不同的 %。 在第二层,市政区划(土地使用)也发生了变化。因此,相同的“地块”现在将占住宅用途 (RES-112) 的 40%、商业用途 (COM-54) 的 20% 和新农业用途 (FAR-33) 的 40%。 所以,我想知道是否有一些差异。一些地块将完全相同。一些地块将保持相同的土地用途,但每个地块的百分比不同。但对于某些地块,土地利用类型或多或少,各占不同的百分比。
我希望此脚本比较这两个图层,并在同一地块 ID 的这两个图层之间存在差异时向我发送电子邮件。
脚本已经在运行,但是需要花费太多时间。
问题是,我认为,脚本遍历数组 1 中每一行的所有数组 2。
我想要的是当array1中有超过1行具有相同ID时,两个数组中都只取这个ID。
也许如果我按 ID 排序,我可以写一个条件。有点像“当你找到你要找的东西时,当你找到不同的值时停止搜索?
很难解释清楚,因为我从上周开始就一直在使用 VB。而且英语不是我的第一语言! ;)
【问题讨论】:
-
数据是否以任何特定方式组织(即排序)?
-
不,它没有以任何方式排序。我没有写代码。我得到了这份新工作,我的老板问我.. 让它工作得更快.. yuk