在VB 里 巧 用 集 合 李 成 俊 赵 文 杰 ---- VB 提 供 一 种 很 有 用 的 数 据 类 型 集 合(Collection),
在VB 里 巧 用 集 合VB
上海龙凤1314 shlf。 她 的 工 作 原 理 类 似 与C 里 的 链 表, 可 以 很 方 便 的 实 现 插 入, 删 除。 并 且 在 使 用 了Key 之 后, 检 索 操 作 也 变 得 非
上海龙凤1314 shlf 在VB 里 巧 用 集 合
上海龙凤1314 shlf 李 成 俊 赵 文 杰
---- VB 提 供 一 种 很 有 用 的 数 据 类 型 集 合(Collection)。 她 的 工 作 原 理 类 似 与C 里 的 链 表, 可 以 很 方 便 的 实 现 插 入, 删 除。 并 且 在 使 用 了Key 之 后, 检 索 操 作 也 变 得 非 常 简 单。 但 其 编 程 上 的 方 便 却 带 来 了 效 率 上 的 急 剧 下 降( 尤 其 在 大 数 据 量 时 会 让 你 无 法 忍 受)。 以 下 举 两 个 例 子 来 讨 论 一 下 怎 样 把 集 合 和 数 组 结 合 使 用, 使 程 序 在 方 便 和 效 率 之 间 达 到 一 种 平 衡。
---- 1 . 要 求 建 立 一 数 据 结 构, 用 来 保 存 学 生 的 学 号, 姓 名 和 成 绩, 并 在 需 要 时 以 成 绩 的 高 低 按 顺 序 输 出 这 些 信 息。
上海龙凤1314 shlf ---- 这 里 我 想 提 供 两 种 解 决 方 法( 当 然 还 有 其 他 方 法)。
上海龙凤1314 shlf ---- 第 一 种: 完 全 用 集 合 来 保 存 数 据。
上海龙凤1314 shlf ---- 首 先 定 义 一 个 结 构 如 下( 该 结 构 同 时 用 与 第 二 种 方 式)
上海龙凤1314 shlf Type tMyType
上海龙凤1314 shlf ID As Long
Name As String
Score As Integer
上海龙凤1314 shlf End Type
再定义类clsData如下
上海龙凤1314 shlf Public ID As Long
上海龙凤1314 shlf Public Name As String
Public Score As Integer
上海龙凤1314 shlf 并定义插入函数用来接受数据并插入到数据结构中
Public Function InsertToCol(pData As tMyType)
注释:其中m_ColData保存记录
上海龙凤1314 shlf Dim myClass As New clsData
Set myClass = Nothing
上海龙凤1314 shlf For iLoopCtrl = 1 To m_ColData.Count
上海龙凤1314 shlf If m_ColData(iLoopCtrl).Score
< = pData.Score Then Exit For
Next
myClass.ID = pData.ID
myClass.Name = pData.Name
上海龙凤1314 shlf myClass.Score = pData.Score
If m_ColData.Count = 0 Or iLoopCtrl
上海龙凤1314 shlf = m_ColData.Count Then
m_ColData.Add Item:=myClass
上海龙凤1314 shlf Else
上海龙凤1314 shlf m_ColIndex.Add Item:=myClass,
上海龙凤1314 shlf before:=iLoopCtrl
End If
End Function
上海龙凤1314 shlf 这时,对每个记录做处理如下
上海龙凤1314 shlf Public Function OutProcess()
For iLoopCtrl = 1 To m_ColData.Count
上海龙凤1314 shlf CurrentID = m_ColData(iLoopCtrl).ID
CurrentName = m_ColData(iLoopCtrl).Name
上海龙凤1314 shlf CurrentScore = m_ColData(iLoopCtrl).Score
上海龙凤1314 shlf 注释:对当前记录做相应处理
上海龙凤1314 shlf Next
End Function
---- 第 二 种: 将 数 组 与 集 合 结 合 起 来, 用 数 组 保 存 数 据 而 用 集 合 保 存 排 序 信 息。
上海龙凤1314 shlf ---- 首 先 定 义 如 下 变 量
Public m_Array(99) As tMyType
上海龙凤1314 shlf 注释:根据需要也可以定义成动态数组
上海龙凤1314 shlf Public m_ColIndex As New Collection
注释:用来保存索引信息
上海龙凤1314 shlf 向数组中插入数据的函数如下
上海龙凤1314 shlf Public Function InsertToArray(pData As tMyType)
上海龙凤1314 shlf If iCurIndex > 99 Then Exit Function
上海龙凤1314 shlf For iLoopCtrl = 1 To m_ColIndex.Count
上海龙凤1314 shlf If m_Array(m_ColIndex(iLoopCtrl)).Score
< = pData.Score Then Exit For
上海龙凤1314 shlf Next
If m_ColIndex.Count = 0 Or iLoopCtrl
= m_ColIndex.Count Then
m_ColIndex.Add iLoopCtrl - 1
上海龙凤1314 shlf Else
m_ColIndex.Add iLoopCtrl - 1, before:=iLoopCtrl
上海龙凤1314 shlf End If
m_Array(iCurIndex).ID = pData.ID
m_Array(iCurIndex).Name = pData.Name
m_Array(iCurIndex).Score = pData.Score
iCurIndex = iCurIndex + 1
End Function
上海龙凤1314 shlf 这时,对每个记录做处理如下
Public Function OutProcess()
For iLoopCtrl = 1 To m_ColData.Count
上海龙凤1314 shlf I = m_ColData(iLoopCtrl)
上海龙凤1314 shlf CurrentID = m_Array(I).ID
CurrentName = m_Array(I).Name
上海龙凤1314 shlf CurrentScore = m_Array(I).Score
上海龙凤1314 shlf 注释:对当前记录做相应处理
Next
上海龙凤1314 shlf End Function
上海龙凤1314 shlf ---- * 性 能 分 析
---- 对 于 集 合 来 讲, 随 着 记 录 个 数 的 增 长, 对 集 合 的 操 作 效 率 飞 快 下 降,
电脑资料
《在VB 里 巧 用 集 合VB》(http://gdyhdog.com)。 因 为, 集 合 按 下 标 查 找 一 记 录 时 首 先 从 集 合 的 头 一 条 记 录 开 始, 顺 序 向 下, 直 到 指 定 的 下 标 位 置。 因 此, 访 问m_ColData(99) 要 比 访 问m_ColData(1) 慢 的 很 多。 而 大 家 都 知 道 数 组 在 内 存 中 是 顺 序 存 放, 因 此, 访 问 某 条 记 录 的 效 率 与 下 标 大 小 无 关。 当 记 录 数 或 每 个 记 录 的 项 目 数 越 大, 效 率 的 提 高 越 明 显。( 大 家 可 以 自 己 写 一 些 测 试 程 序, 具 体 比 较 以 下 它 们 之 间 的 效 率 差 别, 会 感 到 非 常 惊 讶 的)上海龙凤1314 shlf ---- 2 . 当 记 录 有 唯 一 关 键 字, 并 经 常 以 这 个 关 键 字 做 查 询 时 可 以 使 用 以 下 方 法。
---- 定 义 用 于 保 存 数 据 的 结 构 和 结 构 数 组
Type tMyType
Item_1 As String
注释:为关键字
Item_2 As String
Item_3 As String
上海龙凤1314 shlf End Type
Public m_Array() As tMyType
上海龙凤1314 shlf Public m_ColIndex As New Collection
上海龙凤1314 shlf 注释:用于保存索引的集合
上海龙凤1314 shlf 定义用于保存索引信息的类clsIndex如下
上海龙凤1314 shlf Public Item_Key As String
Public ID_OfArray As Integer
上海龙凤1314 shlf 当接受到一条记录pData后插入过程如下
Public Function InsertData(pData As tMyType)
Dim myClass As New clsIndex
上海龙凤1314 shlf ID_OfArray = ID_OfArray + 1
m_Array(ID_OfArray).Item_1 = pData.Item_1
上海龙凤1314 shlf m_Array(ID_OfArray).Item_2 = pData.Item_2
上海龙凤1314 shlf m_Array(ID_OfArray).Item_3 = pData.Item_3
上海龙凤1314 shlf myClass.Item_Key = pData.Item_1
myClass.ID_OfArray = ID_OfArray
m_ColIndex.Add Item:=myClass, Key:=pData.Item_1
End Function
那么,当需要以给出的关键字(mKey)
取得数据时,用以下方法实现
Current_Item1 = m_Array(myClass(mKey)
上海龙凤1314 shlf .ID_OfArray).Item_1
Current_Item2 = m_Array(myClass(mKey)
上海龙凤1314 shlf .ID_OfArray).Item_2
Current_Item3 = m_Array(myClass(mKey)
.ID_OfArray).Item_3
原文转自:http://www.ltesting.net