在VB里巧用集合

2016-02-19 14:51 10 1 收藏

下面是个超简单的在VB里巧用集合教程,图老师小编精心挑选推荐,大家行行好,多给几个赞吧,小编吐血跪求~

【 tulaoshi.com - 编程语言 】

  VB提供一种很有用的数据类型集合(Collection)。 她的工作原理类似与C里的链表,可以很方便的实现插入,删除。并且在使用了Key之后,检索 操作也变得非常简单。但其编程上的方便却带来了效率上的急剧下降(尤其在大数据量时会 让你无法忍受)。以下举两个例子来讨论一下怎样把集合和数组结合使用,使程序在方便和效 率之间达到一种平衡。

  1.要求建立一数据结构,用来保存学生的学号, 姓名和成绩,并在需要时以成绩的高低按顺序输出这些信息。

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

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

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

TypetMyType    IDAsLong    NameAsString    ScoreAsIntegerEndType再定义类clsData如下PublicIDAsLongPublicNameAsStringPublicScoreAsInteger  并定义插入函数用来接受数据并插入到数据结构中PublicFunctionInsertToCol(pDataAstMyType)其中m_ColData保存记录DimmyClassAsNewclsDataSetmyClass=NothingForiLoopCtrl=1Tom_ColData.CountIfm_ColData(iLoopCtrl).Score=pData.ScoreThenExitForNextmyClass.ID=pData.IDmyClass.Name=pData.NamemyClass.Score=pData.ScoreIfm_ColData.Count=0OriLoopCtrl=m_ColData.CountThenm_ColData.AddItem:=myClassElsem_ColIndex.AddItem:=myClass,before:=iLoopCtrlEndIfEndFunction    这时,对每个记录做处理如下  PublicFunctionOutProcess()ForiLoopCtrl=1Tom_ColData.CountCurrentID=m_ColData(iLoopCtrl).IDCurrentName=m_ColData(iLoopCtrl).Name  CurrentScore=m_ColData(iLoopCtrl).Score      对当前记录做相应处理NextEndFunction

  第二种:将数组与集合结合起来,用数组保存数据而 用集合保存排序信息。

  首先定义如下变量

Publicm_Array(99)AstMyType  根据需要也可以定义成动态数组Publicm_ColIndexAsNewCollection    用来保存索引信息向数组中插入数据的函数如下PublicFunctionInsertToArray(pDataAstMyType)IfiCurIndex99ThenExitFunctionForiLoopCtrl=1Tom_ColIndex.CountIfm_Array(m_ColIndex(iLoopCtrl)).Score=pData.ScoreThenExitForNextIfm_ColIndex.Count=0OriLoopCtrl=m_ColIndex.CountThenm_ColIndex.AddiLoopCtrl-1Elsem_ColIndex.AddiLoopCtrl-1,before:=iLoopCtrlEndIfm_Array(iCu  dex).ID=pData.IDm_Array(iCurIndex).Name=pData.Namem_Array(iCurIndex).Score=pData.ScoreiCurIndex=iCurIndex+1EndFunction这时,对每个记录做处理如下PublicFunctionOutProcess()ForiLoopCtrl=1Tom_ColData.Count      I=m_ColData(iLoopCtrl)CurrentID=m_Array(I).IDCurrentName=m_Array(I).NameCurrentScore=m_Array(I).Score对当前记录做相应处理NextEndFunction

  *性能分析

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

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

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

TypetMyTypeItem_1AsString    为关键字Item_2AsStringItem_3AsStringEndTypePublicm_Array()AstMyTypePublicm_ColIndexAsNewCollection    用于保存索引的集合  定义用于保存索引信息的类clsIndex如下PublicItem_KeyAsStringPublicID_OfArrayAsInteger  当接受到一条记录pData后插入过程如下PublicFunctionInsertData(pDataAstMyType)DimmyClassAsNewclsIndexID_OfArray=ID_OfArray+1m_Array(ID_OfArray).Item_1=pData.Item_1m_Array(ID_OfArray).Item_2=pData.Item_2m_Array(ID_OfArray).Item_3=pData.Item_3myClass.Item_Key=pData.Item_1myClass.ID_OfArray=ID_OfArraym_ColIndex.AddItem:=myClass,Key:=pData.Item_1EndFunction  那么,当需要以给出的关键字(mKey)取得数据时,用以下方法实现Current_Item1=m_Array(myClass(mKey).ID_OfArray).Item_1Current_Item2=m_Array(myClass(mKey).ID_OfArray).Item_2Current_Item3=m_Array(myClass(mKey).ID_OfArray).Item_3

来源:http://www.tulaoshi.com/n/20160219/1608125.html

延伸阅读
AutoCAD是一个常用工业绘图平台,用户在使用时经常要用Lisp或ADS进行二次开发,但Lisp处理数据库能力差,编制界面困难,而ADS要求较高.相比之下,VisualBasic(以下简称VB)编写独立程序的速度快,编制界面容易,可进行快速计算,可操作数据库。ACADWIN是AUTOCAD的Windows版程序,具有WINDOWS的许多特点。可以利用DDE进行VB与ACADWIN之间的通讯,实现...
标签: 孕期
胎儿在妈妈肚子里在干嘛     很多怀孕的妈妈们都非常的好奇,当宝宝们成形以后,除了睡觉外,他们都在干什么呢?他们会怎么进行活动呢?下面就随图老师小编一起了解下胎儿在妈妈们腹中到底会做些什么吧。   1.安静悠闲地睡觉      其实,在漫长的十个月里,胎儿大部分时间都在睡觉。胎...
标签: 孕期
宝宝在妈妈肚子里在干嘛?     胎儿在妈妈的腹中会感觉非常的无聊的,所以会做些娱乐活动来玩的哦。那么,胎儿们可以做哪些事情来玩呢?其实是非常的多的哦。下面就随图老师小编一起了解下吧。         1.玩脐带      除了睡觉,胎宝宝一刻都不安静,准妈妈的子宫里并没...
XingMPEGPlayer是软解压播放VCD的优秀软件,但调入XMplayer、进入播放状态、隐藏面板等一系列操作,需要多次点击鼠标,较为麻烦。下面用VISUALBASIC程序首先检查光驱是否准备好或光驱中是否为VCD光碟,然后利用VB模拟XingMPEG的键盘动作,通过短短的几行程序,实现VCD光盘的自动播放。 ①进入VB环境,设置窗体FORM1的Visible属性为Fa...
标签: Web开发
代码如下: -------------------WebService1 ----------------------------- // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。 [System.Web.Script.Services.ScriptService] public class WebService1 : System.Web.Services.WebService { [WebMethod] public Liststring GetList() { Liststring list = ...

经验教程

47

收藏

86
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部