国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

在VB里巧用數據類型集合

2019-11-18 17:47:16
字體:
來源:轉載
供稿:網友
----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
這時,對每個記錄做處理如下
PublicFunctionOut向數組中插入數據的函數如下
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(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->


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 黔西| 黔江区| 海口市| 江源县| 呼和浩特市| 洱源县| 同江市| 湖南省| 海林市| 岑溪市| 中宁县| 错那县| 潮安县| 辉南县| 郎溪县| 怀安县| 南溪县| 东平县| 天祝| 安国市| 安溪县| 红原县| 黑山县| 东安县| 台南县| 密山市| 江源县| 平乡县| 自治县| 中西区| 敖汉旗| 榆树市| 朝阳区| 古浪县| 十堰市| 宁陕县| 滦平县| 西和县| 安化县| 城口县| 曲水县|