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

原创 2002年08月05日 10:03:00


<%
'############################################################################
'#                   #
'#    存储数据键和项目对的类(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 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_Terminate() 
 
End Sub

End Class

%>

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

存储数据键和项目对的类(Dictionary对象) '######################################################################...
  • u014739757
  • u014739757
  • 2014年04月23日 10:09
  • 265

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

存储数据键和项目对的类(Dictionary对象) '######################################################################...
  • bpvwj
  • bpvwj
  • 2014年04月22日 18:33
  • 268

C++类的存储及类对象内存结构(整理)

本文分两部分,前半部分讲类的存储后半部分讲类的内存结构。 C++类的存储 c++中最重要的就是类,那么一个类的对象,它在内存中如何存储的?它占 内存中多少个字节? 首先确定类的构成: 1,数...
  • fenxinzi557
  • fenxinzi557
  • 2016年07月22日 16:06
  • 4043

C#创建安全的字典(Dictionary)存储结构

在上面介绍过栈(Stack)的存储结构,接下来介绍另一种存储结构字典(Dictionary)。 字典(Dictionary)里面的每一个元素都是一个键值对(由二个元素组成:键和值) 键必须是唯一的,而...
  • pengze0902
  • pengze0902
  • 2016年11月27日 19:46
  • 1289

C#中Dictionary的用法

在C#中,Dictionary提供快速的基于兼职的元素查找。他的结构是这样的:Dictionary ,当你有很多元素的时候可以使用它。它包含在System.Collections.Generic名空间...
  • u012102306
  • u012102306
  • 2014年02月10日 10:09
  • 1034

C#控制台基础 判断dictionary中是否已经存在一个键

慈心积善融学习,技术愿为有情学。善心速造多好事,前人栽树后乘凉。我今于此写经验,愿见文者得启发。 using System; using System.Collections; usin...
  • yushaopu
  • yushaopu
  • 2016年09月12日 21:01
  • 5135

SharedPreferences存储用户自定义类

使用JSON和SharedPreferences存储用户自定义类SharedPreferences可以用来永久地存储数据,即使应用被销毁。事实上数据存储在Android的内部存储器上。有两种分方法用来...
  • qwer4755552
  • qwer4755552
  • 2016年11月18日 14:44
  • 652

java对象序列化并存储到文件和数据库

Java中要实现将对象保存起来持久化,需要让对象实现Serializable接口,这样就能将java对象用二进制流保存并恢复。下面我将以保存到文件和保存到mysql来进行解析。先给出序列化类的定义: ...
  • jeryjeryjery
  • jeryjeryjery
  • 2017年04月25日 09:15
  • 5909

不要将数据存储在Application类中

前言:最近在开发中发现了一个比较严重的问题,当我们将应用按home键放入后台运行,一段时间后,当我们再次打开应用的时候,十有八九会出现一个NullPointException的空指针异常,根据logc...
  • gaidandan
  • gaidandan
  • 2015年03月09日 09:34
  • 1043

根据值(value)获取泛型Dictionary的键(key)

很多时候,对泛型(Generic) Diectionary求key或value,本演示是根据value来获取key。Insus.NET在下面准备一些数据: private Dictionar...
  • dyllove98
  • dyllove98
  • 2013年06月14日 21:26
  • 6459
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:存储数据键和项目对的类(Dictionary对象)
举报原因:
原因补充:

(最多只允许输入30个字)