在VB里巧用集合

含着德芙睡觉觉

含着德芙睡觉觉

2016-02-19 14:51

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

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

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

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

(本文来源于图老师网站,更多请访问http://m.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

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

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

  首先定义如下变量

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)慢的很多。而大家 都知道数组在内存中是顺序存放,因此,访问某条记录的效率与下标大小无关。当记录数或 每个记录的项目数越大,效率的提高越明显。(大家可以自己写一些测试程序,具体比较以 下它们之间的效率差别,会感到非常惊讶的)

  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
展开更多 50%)
分享

猜你喜欢

在VB里巧用集合

编程语言 网络编程
在VB里巧用集合

在VB里巧用数据类型集合

编程语言 网络编程
在VB里巧用数据类型集合

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

VB里实现帮助文件速成

编程语言 网络编程
VB里实现帮助文件速成

在VB中“遥控”鼠标

编程语言 网络编程
在VB中“遥控”鼠标

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

在VB中调用HTMLHELP文件

Web开发
在VB中调用HTMLHELP文件

在VB中使用UDP协议

编程语言 网络编程
在VB中使用UDP协议

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Sybase和Oracle安装过程中常遇到的问题

Sybase和Oracle安装过程中常遇到的问题

wps没保存怎么恢复方法

wps没保存怎么恢复方法
下拉加载更多内容 ↓