sql - 比较 VB.NET 中的数组

标签 sql vb.net arrays

在深入研究问题的细节之前,让我提供一些细节来解释我要完成的工作。

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

从 SQL Server 获取数据相当简单。我查询数据库并填充数据网格。完毕。快的。简单的。

从 CAD 系统获取数据的过程稍微复杂一些。我必须加载装配图以获取所有组件零件的列表,然后加载这些单独的图纸以从图纸中提取“零件编号”属性。这是一个有点耗时且缓慢的过程(不幸的是),因为实际上必须访问每个文件。我将这些属性加载到一个数组中(我猜列表可能更有效)。

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

据我所知,这意味着在网格的每一行上循环遍历数组。思考过程是这样的:

  • 默认网格为黄色行。
  • 遍历网格和遍历数组进行比较。如果找到匹配项,则使该行透明并从数组中删除该元素。
  • 完成第 2 步后,数组应只包含网格中未找到的元素。调整数组大小以删除空元素。
  • 将数组元素添加到网格并将这些新行着色为红色。

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

    谢谢!

    注意:用 Visual Studio 2005 编写。

    最佳答案

    您可以将 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 ...
    

    编辑:

    1) 是的,如果您的 key (此处为零件编号)是字符串,则将使用 Dictionary(Of String,...)。

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

    我不会通过代码示例,因为它非常接近字典。 containsKey 变为 contains,而 Add 仅接受一个参数(此处为您的部件号)。

    3)是的,遍历它们并将它们添加到哈希集。

    关于sql - 比较 VB.NET 中的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/888020/

    相关文章:

    MySQL - 如何从字符串中接收子字符串表

    vb.net - 自定义属性未显示在属性窗口中

    c - 两个数组的交集 - C

    vb.net - 在命令提示符下运行多行 vb.net

    java - 如何使用从 Java 中的方法返回的数组

    javascript for 循环数组

    sql - Postgresql在不同服务器上的不同查询计划

    sql - 选择查询所需的性能

    php - SQL IN 运算符在使用其他条件时不起作用

    vb.net - vb.net服务提示音