在VB里巧用数据类型集合

图点冷气

图点冷气

2016-02-19 12:30

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

展开更多 50%)
分享

猜你喜欢

在VB里巧用数据类型集合

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

在VB里巧用集合

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

s8lol主宰符文怎么配

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

VB中各种数据类型转换函数

编程语言 网络编程
VB中各种数据类型转换函数

SQL2000里的数据类型

SQLServer
SQL2000里的数据类型

lol偷钱流符文搭配推荐

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

ASP数据类型

ASP
ASP数据类型

VBScript数据类型

编程语言 网络编程
VBScript数据类型

lolAD刺客新符文搭配推荐

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

常见的十四种Java开发工具及其特点

常见的十四种Java开发工具及其特点

FileSystem对象常用的文件操作函数有哪些?

FileSystem对象常用的文件操作函数有哪些?
下拉加载更多内容 ↓