手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网络编程>Asp.Net编程>列表

在VB里巧用集合

来源:互联网 作者:西部数码 时间:2008-04-09
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!
 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

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

热点关注
IDC资讯 虚拟主机 域名注册 托管租用 vps主机 智能建站
网站运营 建站经验 策划盈利 搜索优化 网站推广 免费资源
网站联盟 联盟新闻 联盟介绍 联盟点评 网赚技巧
行业资讯 业界动态 搜索引擎 网络游戏 门户动态 电子商务 广告传媒
网络编程 Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术 Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 Internet Explorer
网页制作 FrontPages Dreamweaver Javascript css photoshop fireworks Flash
程序设计 Java技术 C/C++ VB delphi
网络知识 网络协议 网络安全 网络管理 组网方案 Cisco技术
操作系统 Win2000 WinXP Win2003 Mac OS Linux FreeBSD
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 价格总览 | 资讯中心 | 友情链接 | 网站地图 | 招贤纳士 | RSS