在VB 里 巧 用 集 合VB -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

    在VB 里 巧 用 集 合 李 成 俊 赵 文 杰 ---- VB 提 供 一 种 很 有 用 的 数 据 类 型 集 合(Collection),

在VB 里 巧 用 集 合VB

。 她 的 工 作 原 理 类 似 与C 里 的 链 表, 可 以 很 方 便 的 实 现 插 入, 删 除。 并 且 在 使 用 了Key 之 后, 检 索 操 作 也 变 得 非

   

   

    在VB 里 巧 用 集 合

    李 成 俊 赵 文 杰

    ---- VB 提 供 一 种 很 有 用 的 数 据 类 型 集 合(Collection)。 她 的 工 作 原 理 类 似 与C 里 的 链 表, 可 以 很 方 便 的 实 现 插 入, 删 除。 并 且 在 使 用 了Key 之 后, 检 索 操 作 也 变 得 非 常 简 单。 但 其 编 程 上 的 方 便 却 带 来 了 效 率 上 的 急 剧 下 降( 尤 其 在 大 数 据 量 时 会 让 你 无 法 忍 受)。 以 下 举 两 个 例 子 来 讨 论 一 下 怎 样 把 集 合 和 数 组 结 合 使 用, 使 程 序 在 方 便 和 效 率 之 间 达 到 一 种 平 衡。

    ---- 1 . 要 求 建 立 一 数 据 结 构, 用 来 保 存 学 生 的 学 号, 姓 名 和 成 绩, 并 在 需 要 时 以 成 绩 的 高 低 按 顺 序 输 出 这 些 信 息。

    ---- 这 里 我 想 提 供 两 种 解 决 方 法( 当 然 还 有 其 他 方 法)。

    ---- 第 一 种: 完 全 用 集 合 来 保 存 数 据。

    ---- 首 先 定 义 一 个 结 构 如 下( 该 结 构 同 时 用 与 第 二 种 方 式)

    Type tMyType

    ID As Long

    Name As String

    Score As Integer

    End Type

    再定义类clsData如下

    Public ID As Long

    Public Name As String

    Public Score As Integer

    并定义插入函数用来接受数据并插入到数据结构中

    Public Function InsertToCol(pData As tMyType)

    注释:其中m_ColData保存记录

    Dim myClass As New clsData

    Set myClass = Nothing

    For iLoopCtrl = 1 To m_ColData.Count

    If m_ColData(iLoopCtrl).Score

    < = pData.Score Then Exit For

    Next

    myClass.ID = pData.ID

    myClass.Name = pData.Name

    myClass.Score = pData.Score

    If m_ColData.Count = 0 Or iLoopCtrl

    = m_ColData.Count Then

    m_ColData.Add Item:=myClass

    Else

    m_ColIndex.Add Item:=myClass,

    before:=iLoopCtrl

    End If

    End Function

    这时,对每个记录做处理如下

    Public Function OutProcess()

    For iLoopCtrl = 1 To m_ColData.Count

    CurrentID = m_ColData(iLoopCtrl).ID

    CurrentName = m_ColData(iLoopCtrl).Name

    CurrentScore = m_ColData(iLoopCtrl).Score

    注释:对当前记录做相应处理

    Next

    End Function

    ---- 第 二 种: 将 数 组 与 集 合 结 合 起 来, 用 数 组 保 存 数 据 而 用 集 合 保 存 排 序 信 息。

    ---- 首 先 定 义 如 下 变 量

    Public m_Array(99) As tMyType

    注释:根据需要也可以定义成动态数组

    Public m_ColIndex As New Collection

    注释:用来保存索引信息

    向数组中插入数据的函数如下

    Public Function InsertToArray(pData As tMyType)

    If iCurIndex > 99 Then Exit Function

    For iLoopCtrl = 1 To m_ColIndex.Count

    If m_Array(m_ColIndex(iLoopCtrl)).Score

    < = pData.Score Then Exit For

    Next

    If m_ColIndex.Count = 0 Or iLoopCtrl

    = m_ColIndex.Count Then

    m_ColIndex.Add iLoopCtrl - 1

    Else

    m_ColIndex.Add iLoopCtrl - 1, before:=iLoopCtrl

    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

    这时,对每个记录做处理如下

    Public Function OutProcess()

    For iLoopCtrl = 1 To m_ColData.Count

    I = m_ColData(iLoopCtrl)

    CurrentID = m_Array(I).ID

    CurrentName = m_Array(I).Name

    CurrentScore = m_Array(I).Score

    注释:对当前记录做相应处理

    Next

    End Function

    ---- * 性 能 分 析

    ---- 对 于 集 合 来 讲, 随 着 记 录 个 数 的 增 长, 对 集 合 的 操 作 效 率 飞 快 下 降,

电脑资料

在VB 里 巧 用 集 合VB》(https://www.unjs.com)。 因 为, 集 合 按 下 标 查 找 一 记 录 时 首 先 从 集 合 的 头 一 条 记 录 开 始, 顺 序 向 下, 直 到 指 定 的 下 标 位 置。 因 此, 访 问m_ColData(99) 要 比 访 问m_ColData(1) 慢 的 很 多。 而 大 家 都 知 道 数 组 在 内 存 中 是 顺 序 存 放, 因 此, 访 问 某 条 记 录 的 效 率 与 下 标 大 小 无 关。 当 记 录 数 或 每 个 记 录 的 项 目 数 越 大, 效 率 的 提 高 越 明 显。( 大 家 可 以 自 己 写 一 些 测 试 程 序, 具 体 比 较 以 下 它 们 之 间 的 效 率 差 别, 会 感 到 非 常 惊 讶 的)

    ---- 2 . 当 记 录 有 唯 一 关 键 字, 并 经 常 以 这 个 关 键 字 做 查 询 时 可 以 使 用 以 下 方 法。

    ---- 定 义 用 于 保 存 数 据 的 结 构 和 结 构 数 组

    Type tMyType

    Item_1 As String

    注释:为关键字

    Item_2 As String

    Item_3 As String

    End Type

    Public m_Array() As tMyType

    Public m_ColIndex As New Collection

    注释:用于保存索引的集合

    定义用于保存索引信息的类clsIndex如下

    Public Item_Key As String

    Public ID_OfArray As Integer

    当接受到一条记录pData后插入过程如下

    Public Function InsertData(pData As tMyType)

    Dim myClass As New clsIndex

    ID_OfArray = ID_OfArray + 1

    m_Array(ID_OfArray).Item_1 = pData.Item_1

    m_Array(ID_OfArray).Item_2 = pData.Item_2

    m_Array(ID_OfArray).Item_3 = pData.Item_3

    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)

    .ID_OfArray).Item_1

    Current_Item2 = m_Array(myClass(mKey)

    .ID_OfArray).Item_2

    Current_Item3 = m_Array(myClass(mKey)

    .ID_OfArray).Item_3

    原文转自:http://www.ltesting.net

最新文章