存储数据键和项目对的类(Dictionary对象

存储数据键和项目对的类(Dictionary对象)

<% 
'############################################################################ 
'# # 
'# 存储数据键和项目对的类(Dictionary对象) # 
'# # 
'# 本类功能用法完全按照 Microsoft Visual Basic Scripting Edition # 
'# 中的Dictionary对象编写,使用本类完全可以参照其的功能和用法。 # 
'# 下面便是该对象的中文使用说明 # 
'# http://www.microsoft.com/china/vbscript/vbslang/vsobjDictionary.htm # 
'# 本类完全由简单的VBscript编写,所以您可以在任何支持ASP的空间使用它 # 
'# 从而获的使用Dictionary对象的便利。 # 
'# 您可以随意使用,但请保留版权信息!谢谢! # 
'# # 
'# 编写者:ChinaOK # 
'# Http://www.ChinaOK.net # 
'# 2002.8.3 # 
'# # 
'############################################################################

Class Dictionary

Public Copyright, Developer, Name, Version, Web

Private aryKey() 
Private aryItem() 
Private iCompareMode

Private Sub Class_Initialize() 
'请保留此信息 
Copyright = "2002 www.ChinaOK.Net, All rights reserved." 
Developer = "ChinaOK" 
Name = "Dictionary" 
Version = "1.0b" 
Web = "http://www.ChinaOK.Net" 
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 
Loop 
BinSearch=Result 
End Function

Private Function DeleteSort(sKey) 
Dim iTop,I,iLen 
iTop=BinSearch(sKey) 
If iTop=0 Then 
Err.Raise

End Function
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值