| 域名空间 下载中心 社区论坛 信息公告 MY小屋 |
![]() |
联系我们 设为首页 加入收藏 |
|
首页 | 新闻资讯 | 编程开发 | 网页设计 | 图形图象 | 网络媒体 | 网站模板 | 数 据 库 | 投稿 论坛 | 操作系统 | 系统优化 | 网络安全 | 黑客技术 | 硬件学堂 | 硬件报价 | 服 务 器 | 地图 专题 | 应用软件 | 聊天通讯 | Q Q 专栏 | 建站经验 | 在线工具 | 站长Club | 注 册 表 | 旧版 社会 | 游戏娱乐 | 设计欣赏 | 疑难解答 | 社区论坛 | 韩国素材 | 素材图库 | 广告服务 | 服务 |
| 新版上线![旧版] | |||||
注:打开慢时请稍等
在VB里巧用集合http://www.iyit.net 日期:2006-4-29 22:30:06 来源: 点击: |
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自动改变控件大小 下一篇:怎样限制鼠标移动 转载请注明来源:www.iyit.net 特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。 |
| 最新更新 | 热点排行 | 推荐新闻 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 友情链接 | ||||||
| 设置首 页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接 |
| |||||||