网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Visual Basic
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.VisualBasic集成开发环境的元素.
.用VB建立Access数据库结构.
.禁用Alt-Tab或Ctrl-Alt-Del.
.用VB设计一个定时闹钟程序.
.如何访问文本文件(2)----用Micro.
.VB中位图旋转的实现.
.如何用VB准确计算年龄.
.如何从SOUND.DRV中提取声音.
.深入使用LIKE操作符.
.教小朋友认识红绿灯.
.MTS管理自动化.
.VB中不规则图形热点的实现.
.VBScript变量.
.用VB制作即时动态按钮.
.关于VisualBasic6.0类开发(下).
.基于Windows95平台的VB5串行端口.
.跟我学做记事本.
.用VB编写FLASH动画播放器.
.如何用API及MMSYSTEM.DLL播放AVI.
.VB5.0中远程数据库的访问.

在VB里巧用数据类型集合

发表日期:2006-2-27


----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->

上一篇:如何设置对VB数据库连接的动态路径 人气:3971
下一篇:用VB5.0从Recordset中打印列表 人气:3761
浏览全部Visual Basic的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐