比较VB.NET中的数组

Mr *_*ous 4 sql vb.net arrays

在进入问题的具体细节之前,让我提供一些细节来解释我想要完成的事情.

我有两个数据源 - 一个是包含部件号,描述等的SQL Server.另一个是没有传统意义上的数据库的CAD系统.我要做的是从SQL Server中读出材料清单并将其与CAD装配图进行比较,以确保CAD系统包含与SQL Server相同的信息.

从SQL Server获取数据非常简单.我查询数据库并填充数据网格.完成.快.简单.

从CAD系统获取数据需要更多一些.我必须加载装配图以获取所有零部件的列表,然后加载这些单独的图纸以从图纸中拉出"零件号"属性.这是一个有点耗时且缓慢的过程(不幸的是),因为必须实际访问每个文件.我将这些属性加载到一个数组中(我猜一个列表可能更有效).

所以现在我有一个带有部件号的数据网格和数组.我需要比较它们并相应地着色网格.如果零件存在于两者中,则网格应保持透明,如果仅存在于网格中,则将行黄色,如果仅在数组中,则添加红色的行.

我可以说,这意味着在网格的每一行上循环遍历数组.思考过程是这样的:

  1. 将网格默认为黄色行.
  2. 循环通过网格并循环遍历数组进行比较.如果找到匹配项,请使该行透明并从数组中删除该元素.
  3. 完成第2步后,该数组应仅包含在网格中找不到的元素.调整数组大小以删除空元素.
  4. 将数组的元素添加到网格中,并将这些新行的颜色设置为红色.

这种逻辑的问题在于从性能角度看它似乎很昂贵.当然有更好的方法吗?此外,如果我以某种方式修改网格(如度假村),我必须再次完成该过程.我真的很感激这方面的一些建议.

谢谢!

注意:用Visual Studio 2005编写.

Met*_*ght 7

您可以从字典中加载CAD系统中的数据(按部件号索引).然后你可以通过网格检查它是否存在于字典中,这是一个快速操作(O(1)).您可以完全按照说法执行操作,删除字典中找到的元素并添加数据网格中的其余元素.

这里有一些用于创建和使用字典的代码(使用C#样式注释来保留格式):

//First argument is your key type, second is your item type
Dim cadParts As New Dictionary(Of Integer, Part)

//Add items to the parts dictionary
For Each part As Part In cadPartsArray
  cadParts.Add(part.PartNumber,part)
Next

//Check if a part exists
Dim partNumber As Integer = 12345
If cadParts.ContainsKey(partNumber) ...

//Remove a part
cadParts.Remove(partNumber)

//Go through the remaining values
For Each part As Part In cadParts.Values ...
Run Code Online (Sandbox Code Playgroud)

编辑:

1)是的,如果你的密钥(这里,部件号)是一个字符串,那么将使用一个字典(Of String,...).

2)我假设你有一个名为Part的类,其中包含一些关于零件的信息.如果您只有部件号而没有其他信息,那么您可以改为创建一个Hashset.它基本上与字典相同,但是使用这种结构,值也是你的关键.您将创建一个这样的哈希集:

Dim cadParts As New Hashset(Of String)
Run Code Online (Sandbox Code Playgroud)

我不会通过代码示例,因为它非常接近Dictionary.ContainsKey变为Contains,Add只接受一个参数(这里是你的部件号).

3)是的,循环遍历它们并将它们添加到hashset.