在VB里巧用数据类型集合

2016-02-19 12:30 7 1 收藏

清醒时做事,糊涂时读书,大怒时睡觉,无聊时关注图老师为大家准备的精彩内容。下面为大家推荐在VB里巧用数据类型集合,无聊中的都看过来。

【 tulaoshi.com - 编程语言 】

----VB提供一种很有用的数据类型集合(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)
  IfiCurIndex99ThenExitFunction
  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(iCurIndex).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.tulaoshi.com/n/20160219/1601046.html

延伸阅读
标签: Web开发
JavaScript脚本语言同其它语言一样,有它自身的基本数据类型、表达式和算术运算符以及程序的基本框架结构。JavaScript提供了四种基本的数据类型用来处理数字和文字, 而变量提供存放信息的地方, 表达式则可以完成较复杂的信息处理 。 1、 基本数据类型 在JavaScript中四种基本的数据类型:数值(整数和实数)、字符串型(用号或&...
1.SQL SERVER的数据类型 数据类弄是数据的一种属性,表示数据所表示信息的类型。任何一种计算机语言都定义了自己的数据类型。当然,不同的程序语言都具有不同的特点,所定义的数据类型的各类和名称都或多或少有些不同。SQLServer 提供了 25 种数据类型: Binary [(n)] Varbinary [(n)] Char [(n)] Varchar[(n)] Nchar[(n)] Nvarchar[(n...
标签: MySQL mysql数据库
我们要把现实世界中的各种信息转换成计算机能理解的东西,这些转换后的信息就形成了数据。例如,某人的出生日期是“1987年5月23日”,他的身高是170厘米,等等。数据不仅包括数字、字母、文字和其他特殊字符组成的文本形式的数据,而且还包括图形、图像、动画、影像、声音等多媒体数据。但使用最多、最基本的仍然是文本数据。   &n...
使用记录 用户可以给记录赋值、将值传递给其他程序。记录作为一种复合数据结构意味作他有两个层次可用。用户可以引用整个记录,使用select into或fetch转移所有域,也可以将整个记录传递给一个程序或将所有域的值赋给另一个记录。在更低的层次,用户可以处理记录内单独的域,用户可以给单独的域赋值或者在单独的域上运行布尔表达式,也可...
使用集合 象记录一样,集合可以在两个层面上使用: . 操作整个集合 . 访问集合中的单个元素 第一种情况使用集合名,第二种情况使用下标: collection(subscript) index_by表的下标是两为的整数,可以为正也可以为负,范围是:-2147483647--2147483647。嵌套表和VARRAY表示元素在集合中的位置,用户很难灵...

经验教程

156

收藏

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