浏览器大全:是一个提供流行浏览器教程、在线学习分享的学习平台!

在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

---- * 性 能 分 析
---- 对 于 集 合 来 讲, 随 着 记 录 个 数 的 增 长, 对 集 合 的 操 作 效 率 飞 快 下 降。 因 为, 集 合 按 下 标 查 找 一 记 录 时 首 先 从 集 合 的 头 一 条 记 录 开 始, 顺 序 向 下, 直 到 指 定 的 下 标 位 置。 因 此, 访 问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

相关软件

2345加速浏览器官方版

2345加速浏览器官方版 | 56.2MB

2345加速浏览器官方版

新一代2345加速浏览器采用Chromium和IE双内核,主打极速与安全特性。基于Chromium深度定制,引入网页智能预加载技术,访问网页更快速..

QQ浏览器官方正式版

QQ浏览器官方正式版 | 49.67MB

QQ浏览器官方正式版

QQ浏览器秉承TT浏览器1-4系列方便易用的特点,但技术架构不同,交互和视觉表现也重新设计,采用Chromium内核+IE双内核,让浏览快速稳定...

百度浏览器最新版下载

百度浏览器最新版下载 | 13.3MB

百度浏览器最新版下载

q百度浏览器,是一款简洁轻快、智能懂你的浏览器。依靠百度强大的搜索平台,在满足用户浏览网页的基础上,它整合百度体系业务优势,带给用户更方便的浏览方式功能...

UC浏览器官方正式版

UC浏览器官方正式版 | 44.2MB

UC浏览器官方正式版

UC浏览器(UC Browser)是UC Mobile Limited在2004年8月开发的一款软件,分uc手机浏览器和uc浏览器电脑版。UC浏览器是全球使用量最大的第三方手机浏览器...

猎豹浏览器2022最新版下载

猎豹浏览器2022下载 | 45MB

猎豹浏览器2022最新版下载

猎豹安全浏览器对Chrome的Webkit内核进行了超过100项的技术优化,访问网页速度更快。其具有首创的智能切换引擎,动态选择内核匹配不同网页...

360安全浏览器官方版下载

360安全浏览器下载 | 21.4MB

360安全浏览器官方版下载

360安全浏览器拥有全国最大的恶意网址库,采用恶意网址拦截技术,可自动拦截挂马、欺诈、网银仿冒等恶意网址。独创沙箱技术,在隔离模式即使访问****也不会感染...