存储数据键和项目对的类(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
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

bpvwj

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值