电信主站 网通分站
购买流程 付款方式 常见问题 在线提问 续租服务 购物车
用户名: 密 码: 忘记密码?
首 页
域名注册
虚拟主机
双线主机
服务器租用
VPS主机
企业邮局
代理专区
客服中心
虚拟主机行业资讯 虚拟主机评测对比 互联网最新动态 技术学院 站长资讯 在线教程 网站运营
搜索优化 服务器 网络编程 图形图象 站长之家 网页制作 操作系统
冲浪宝典 软件教学 视频通信 办公软件 邮件系统 网络安全 认证考试
您当前位置:西部数码->资讯中心-> 网页制作-> FrontPages教程
在vb里巧用数据类型集合_visualbasic教程
作者:网友供稿 点击:0
  西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!虚拟主机可在线rar解压,自动数据恢复设置虚拟目录等.虚拟主机免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金!
文章页数:[1] 
----VB提供一种很有用的数据类型集合(Collection)。她的工作原理类似与C里的链表,可以很方便的实现插入,删除。并且在使用了Key之后,检索操作也变得非常简单。但其编程上的方便却带来了效率上的急剧下降(尤其在大数据量时会让你无法忍受)。以下举两个例子来讨论一下怎样把集合和数组结合使用,使程序在方便和效率之间达到一种平衡。
----1.要求建立一数据结构,用来保存学生的学号,姓名和成绩,并在需要时以成绩的高低按顺序输出这些信息。

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

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

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

TypetMyType
IDAsLong
NameAsString
ScoreAsInteger
EndType
再定义类clsData如下
PublicIDAsLong
PublicNameAsString
PublicScoreAsInteger
并定义插入函数用来接受数据并插入到数据结构中
PublicFunctionInsertToCol(pDataAstMyType)
其中m_ColData保存记录
DimmyClassAsNewclsData
SetmyClass=Nothing
ForiLoopCtrl=1Tom_ColData.Count
Ifm_ColData(iLoopCtrl).Score
<=pData.ScoreThenExitFor
Next
myClass.ID=pData.ID
myClass.Name=pData.Name
myClass.Score=pData.Score
Ifm_ColData.Count=0OriLoopCtrl
=m_ColData.CountThen
m_ColData.AddItem:=myClass
Else
m_ColIndex.AddItem:=myClass,
before:=iLoopCtrl
EndIf
EndFunction
这时,对每个记录做处理如下
PublicFunctionOutProcess()
ForiLoopCtrl=1Tom_ColData.Count
CurrentID=m_ColData(iLoopCtrl).ID
CurrentName=m_ColData(iLoopCtrl).Name
CurrentScore=m_ColData(iLoopCtrl).Score
对当前记录做相应处理
Next
EndFunction

----第二种:将数组与集合结合起来,用数组保存数据而用集合保存排序信息。
----首先定义如下变量

Publicm_Array(99)AstMyType
根据需要也可以定义成动态数组
Publicm_ColIndexAsNewCollection
用来保存索引信息
向数组中插入数据的函数如下
PublicFunctionInsertToArray(pDataAstMyType)
IfiCurIndex>99ThenExitFunction
ForiLoopCtrl=1Tom_ColIndex.Count
Ifm_Array(m_ColIndex(iLoopCtrl)).Score
<=pData.ScoreThenExitFor
Next
Ifm_ColIndex.Count=0OriLoopCtrl
=m_ColIndex.CountThen
m_ColIndex.AddiLoopCtrl-1
Else
m_ColIndex.AddiLoopCtrl-1,before:=iLoopCtrl
EndIf
m_Array(iCurIndex).ID=pData.ID
m_Array(iCurIndex).Name=pData.Name
m_Array(iCurIndex).Score=pData.Score
iCurIndex=iCurIndex 1
EndFunction

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

PublicFunctionOutProcess()
ForiLoopCtrl=1Tom_ColData.Count
I=m_ColData(iLoopCtrl)
CurrentID=m_Array(I).ID
CurrentName=m_Array(I).Name
CurrentScore=m_Array(I).Score
对当前记录做相应处理
Next
EndFunction

----*性能分析
----对于集合来讲,随着记录个数的增长,对集合的操作效率飞快下降。因为,集合按下标查找一记录时首先从集合的头一条记录开始,顺序向下,直到指定的下标位置。因此,访问m_ColData(99)要比访问m_ColData(1)慢的很多。而大家都知道数组在内存中是顺序存放,因此,访问某条记录的效率与下标大小无关。当记录数或每个记录的项目数越大,效率的提高越明显。(大家可以自己写一些测试程序,具体比较以下它们之间的效率差别,会感到非常惊讶的)

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

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

TypetMyType
Item_1AsString
为关键字
Item_2AsString
Item_3AsString
EndType
Publicm_Array()AstMyType
Publicm_ColIndexAsNewCollection
用于保存索引的集合
定义用于保存索引信息的类clsIndex如下
PublicItem_KeyAsString
PublicID_OfArrayAsInteger
当接受到一条记录pData后插入过程如下
PublicFunctionInsertData(pDataAstMyType)
DimmyClassAsNewclsIndex
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.AddItem:=myClass,Key:=pData.Item_1
EndFunction
那么,当需要以给出的关键字(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.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关主题
文章页数:[1] 
Google
热门文章
·frontpage2002高效使用的技巧_frontpages教程
·用vb编写windowscgi应用程序_visualbasic教程
·frontpage2000值得学习的10个操作技巧(下)_frontpages教程
·轻松制作自己的信息反馈web页_frontpages教程
·用frontpage 2000做样式表_frontpages教程
·网上电影发布步步进_frontpages教程
·frontpage2000实务高级网站管理_frontpages教程
·精彩新思路:frontpage xp玩特效_frontpages教程
·认识frontpage 2002扩充插件之七_frontpages教程
·获得、设置鼠标双击间隔_visualbasic教程

最新文章
·用frontpage手把手教你制作网上电影的发布_frontpages教程
·在xp中如何使用windows vista屏保_windows xp
·vb.net实现窗体图标最小化到状态栏_vb/vb.net教程
·用photoshop消除照片中的杂色条纹_photoshop教程
·photoshop照片处理:纠正倾斜照片_photoshop教程
·photoshop实例提高:魔幻特效制作实录_photoshop教程
·windows xp系统还原点丢失怎么办?_windows xp
·photoshop打造融化的巧克力字_photoshop教程
·用frontpage 2003发布您的网站_frontpages教程
·用frontpage2003轻松制作asp动态网页_frontpages教程


 
 


版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
  打印  刷新  关闭
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 虚拟主机 | 资讯中心 | 友情链接 | 网站地图

版权所有 西部数码(www.west263.com)
CopyRight (c) 2002~2006 west263.com all right reserved.
公司地址:四川成都市万和路90号天象大厦4楼 邮编:610031
电话总机:028-86262244 86263048 86263408 86263960 86264018 86267838
售前咨询:总机转201 202 203 204 206 208
售后服务:总机转211 212 213 214
财务咨询:总机转224 223 传真:028-86264041 财务QQ:点击发送消息给对方635483282
售前咨询QQ:点击发送消息给对方2182518 点击发送消息给对方241975952 点击发送消息给对方275026793 点击发送消息给对方408235859
售后服务QQ:点击发送消息给对方17708515 点击发送消息给对方307742704 点击发送消息给对方287976517 点击发送消息给对方363783715
《中华人民共和国增值电信业务经营许可证》编号:川B2-20030065号