转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> VB.NET程序 >> 正文
在VB里巧用集合         ★★★★

在VB里巧用集合

作者:闵涛 文章来源:闵涛的学习笔记 点击数:700 更新时间:2009/4/23 14:57:48
 B提供一种很有用的数据类型集合(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(iCu   dex).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.NET程序]GSM短信模块库函数,可以用VB,VC,调用简单实用  [办公软件]PowerPoint做交互课件之弃用VBA
[办公软件]VBA获取U盘、主板、CPU序列号和网卡MAC地址  [办公软件]VBA设置文件属性及加密源代码示例
[办公软件]VBA中初始化ADO连接的几种方法  [网络安全]“VB破坏者变种N”病毒摘要
[Web开发]ASP.NET上传文件到数据库VB版  [办公软件]在Excel中利用VBA实现多表单元格数据的读取与赋值…
[办公软件]使用Vba读取已关闭的Excel工作薄数据到当前工作表…  [办公软件]Excel编程基础之VBA文件操作详解
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台