You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET:如何基于条件从类列表快速设置clsElement0D类实例

优化批量节点查找的高效实现方案

原代码的核心问题是每次查找都遍历两次AllNodes列表(先Exists检查,再Find获取),当需要执行数十万次此类操作时,时间复杂度会从O(n)飙升至O(2nk)(k为操作次数),导致整体性能急剧下降。

以下是两种针对性的优化方案:

方案一:单次遍历完成查找与判断

直接调用Find方法,然后判断返回结果是否为Nothing,避免重复遍历列表:

Dim targetNode As clsElement0D = AllNodes.Find(Function(n As clsElement0D) n.Tag = nodeNo And Not n.isModeledNode)
If targetNode IsNot Nothing Then
    FirstNode = targetNode.ShallowCopy
End If

该方案将单次查找的时间复杂度从O(2n)降至O(n),对于操作次数不多的场景已能明显提升效率。

方案二:预构建哈希字典(适合数十万次批量操作)

如果需要执行数十万次查找,最有效的方式是提前构建一次哈希字典,利用字典O(1)的查找特性彻底优化性能:

1. 初始化字典(仅执行一次)

' 替换[TagType]为你实际的Tag数据类型(如Integer、String等)
Dim modeledNodeDict As New Dictionary(Of [TagType], clsElement0D)

For Each node As clsElement0D In AllNodes
    ' 仅将符合isModeledNode=False的节点存入字典
    If Not node.isModeledNode Then
        ' 若同一Tag可能对应多个节点,可改为存储List(Of clsElement0D)
        If Not modeledNodeDict.ContainsKey(node.Tag) Then
            modeledNodeDict.Add(node.Tag, node)
        End If
    End If
Next

2. 批量查找时的调用

Dim targetNode As clsElement0D
If modeledNodeDict.TryGetValue(nodeNo, targetNode) Then
    FirstNode = targetNode.ShallowCopy
End If

该方案的整体时间复杂度为O(n + k)(n为AllNodes长度,k为查找次数),相比原方案的O(2nk),性能提升非常显著,尤其适合数十万次的批量操作场景。

内容的提问来源于stack exchange,提问作者Anas Ahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 17:57:50