在VB里巧用数据类型集合
2008-02-23 06:53:59来源:互联网 阅读 ()
---- 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
上一篇: VB6中动态设置报表结果
下一篇: 用VB 5.0从Recordset中打印列表
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash