儲存資料鍵和專案對的類(Dictionary物件) (轉)
'############################################################################
'# #
'# 資料鍵和專案對的類(Dictionary) #
'# #
'# 本類功能用法完全按照 Scripting Edition #
'# 中的Dictionary物件編寫,使用本類完全可以參照其的功能和用法。 #
'# 下面便是該物件的中文使用說明 #
'# /vbslang/vsobjDictionary.htm"> #
'# 本類完全由簡單的VBscript編寫,所以您可以在任何支援的空間使用它 #
'# 從而獲的使用Dictionary物件的便利。 #
'# 您可以隨意使用,但請保留版權資訊!謝謝! #
'# #
'# 編寫者:ChinaOK #
'# "> #
'# 2002.8.3 #
'# #
'############################################################################
Class Dictionary
Public Copyright, Developer, Name, Version,
Private aryKey()
Private aryItem()
Private iCompareMode
Private Sub Class_Initialize()
'請保留此資訊
Copyright = "2002 , All rights reserved."
Developer = "ChinaOK"
Name = "Dictionary"
Version = "1.0b"
Web = ""
Redim aryKey(0)
Redim aryItem(0)
aryKey(0)=""
aryItem(0)=""
iCompareMode=0
End Sub
Public Function Add(sKey,Item)
InsertSort sKey,Item
End Function
Public Function Exists(sKey)
If BinSearch(sKey)=0 Then
Exists=false
Else
Exists=True
End if
End Function
Public Function Items()
Items=aryItem
End Function
Public Function Keys()
Keys=aryKey
End Function
Public Function Remove(sKey)
DeleteSort sKey
End Function
Public Function RemoveAll()
Redim aryKey(0)
Redim aryItem(0)
aryKey(0)=""
aryItem(0)=""
End Function
Property Get Count()
Dim Len1,Len2
Len1=ubound(aryKey)
Len2=ubound(aryItem)
If Len1<>Len2 Then Redim Preserve aryItem(Len1)
Count=Len1
End Property
Property Get Item(sKey)
Dim iTop
iTop=0
iTop = BinSearch(sKey)
If iTop<>0 Then
Item=aryItem(iTop)
Else
Add sKey,""
Item=""
End If
End Property
Property Let Item(sKey,NewItem)
Dim iTop
iTop=0
iTop = BinSearch(sKey)
If iTop<>0 Then
aryItem(iTop)=NewItem
Else
Add sKey,NewItem
End If
End Property
Property Let Key(sKey,sNewKey)
Dim iTop
iTop = 0
iTop = BinSearch(sKey)
If iTop<>0 Then
aryKey(iTop)=sNewKey
Else
Err.Raise 19782,"myDictionary","未找到元素" & sKey,"",0
End If
End Property
Property Let CompareMode(iMode)
If Count()>0 Then Err.Raise 19783,"myDictionary","設定字串關鍵字比較必須在Items為空時設定","",0
If (iMode<>0 And iMode<>1) Then iMode=0
iCompareMode=iMode
End Property
Property Get CompareMode()
CompareMode=iCompareMode
End Property
Private Function BinSearch(sKey)
'折半查詢演算法
Dim Result
Result=0
Dim iHigh,iLow,iMid
iHigh = Count()
iLow = 1
Do While (iLow<=iHigh)
iMid=(iLow+iHigh)2
If strComp(aryKey(iMid),sKey,iCompareMode)=0 Then
Result=iMid
Exit Do
End If
If strComp(aryKey(iMid),sKey,iCompareMode)=1 Then
iHigh=iMid-1
Else
iLow=iMid+1
End if
L
BinSearch=Result
End Function
Private Function DeleteSort(sKey)
Dim iTop,I,iLen
iTop=BinSearch(sKey)
If iTop=0 Then
Err.Raise 19782,"myDictionary","未找到元素" & sKey,"",0
Else
iLen=Count()
For I=iTop+1 To iLen
aryKey(I-1)=aryKey(I)
aryItem(I-1)=aryItem(I)
Next
Redim Preserve aryKey(iLen-1)
Redim Preserve aryItem(iLen-1)
End if
End Function
Private Function InsertSort(sKey,Item)
Dim I,J,iLen
iLen=Count()
'查詢插入 ,直接查詢插入演算法
For I=1 To iLen
If (strComp(aryKey(I),sKey,iCompareMode)<>-1) Then
Exit For
End If
Next
If (I>iLen) Then
'直接插入
Redim Preserve aryKey(I)
Redim Preserve aryItem(I)
aryKey(I)=sKey
aryItem(I)=Item
Else
If (strComp(aryKey(I),sKey,iCompareMode)=0) Then
Err.Raise 19781,"myDictionary","此鍵已與該集合的一個元素關聯","",0
Else
Redim Preserve aryKey(iLen+1)
Redim Preserve aryItem(iLen+1)
For J=iLen+1 To I+1 Step -1
aryKey(J) = aryKey(J-1)
aryItem(J)= aryItem(J-1)
Next
aryKey(I)=sKey
aryItem(I)=Item
End If
End If
End Function
'類銷燬
Private Sub Class_Tenate()
End Sub
End Class
%>
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-992756/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- TIDB儲存TiKV的鍵值對資料TiDB
- 塊儲存 檔案儲存 物件儲存物件
- 資料儲存--檔案儲存
- 檔案系統儲存與oracle資料庫儲存對比Oracle資料庫
- 【clickhouse專欄】對標mongodb儲存類JSON資料文件統計分析MongoDBJSON
- 資料儲存(1):從資料儲存看人類文明-資料儲存器發展歷程
- mysql 資料儲存檔案及6類日誌MySql
- Android中的資料儲存之檔案儲存Android
- 實現鍵值對儲存(二):以現有鍵值對儲存為模型模型
- Oracle大物件資料儲存簡介Oracle物件
- 大資料的儲存和管理大資料
- 物件儲存 vs 檔案儲存 vs 塊儲存,選哪個?物件
- bbs的資料結構和儲存過程(二) (轉)資料結構儲存過程
- bbs的資料結構和儲存過程(一) (轉)資料結構儲存過程
- bbs的資料結構和儲存過程(三) (轉)資料結構儲存過程
- IOS資料儲存之檔案沙盒儲存iOS
- MySQL資料庫的儲存引擎(轉)MySql資料庫儲存引擎
- 【Qt】QVector對儲存資料的釋放QT
- 資料庫檔案儲存(DBFS),是一款針對資料庫場景的雲原生共享檔案儲存服務資料庫
- 資料探勘專案的特徵和關鍵環節特徵
- 表資料的儲存對索引的影響索引
- Netflix如何使用bulldozer從資料倉儲批處理資料轉移到鍵值儲存?
- 使用儲存過程(PL/SQL)向資料庫中儲存BLOB物件儲存過程SQL資料庫物件
- Android鍵值對儲存成XML檔案SharedPreferencesAndroidXML
- [資料庫系統]儲存和檔案結構資料庫
- 【轉載】把握資料倉儲中的"鍵"
- 使用資料庫儲存session的方法 (轉)資料庫Session
- 海量非結構化資料儲存難題 ,杉巖資料物件儲存完美解決物件
- 儲存—物件儲存_Minio物件
- DNA儲存,拯救人類資料危機的良方?
- 物件儲存物件
- DAOS 分散式非同步物件儲存|資料平面分散式非同步物件
- 資料庫開發---常用物件-儲存過程資料庫物件儲存過程
- 第10章 物件和類——物件和類(六) 抽象資料型別物件抽象資料型別
- 關於資料庫中客戶基本資料儲存資訊分類的設計說明 (轉)資料庫
- 杉巖:淺談物件儲存和塊儲存區別物件
- Redis資料儲存和讀寫Redis
- 關於InnoDB表資料和索引資料的儲存索引