由于要对一些数据进行处理,比较麻烦,实现某个算法要处理大量不同的不同类型的数据。

所以考虑到一些因素,又在使用VB6(可惜微软不支持VB6了,改为DotNet框架了 ),所以使用 VB6 自带的 Collection集合(类) 最好。

其实Collection 也是有Key 和 Value一一对应的关系的。而且 还有 ID 顺序。

现在不是流行 key-value的数据库么,collection如果可以保存到文件,那么不久完美了么?? 反正 现在当作 key value的实时处理数据的库来用 还是很好的。

从VB6的 《类生成器实用工具》 创建 collection挺方便,唯一不方便的是,默认不把 collection当作类来使用。其实 这就是一个类而已么。一般collection只有一个就行,add多个元素。但是collection也可以 创建多个,就是collection下有collection,下又有 一些 class,复杂程度稍微高一点。

下面是一个简单的collection配合一个class的例子。

'FileName : OneKeyCls.clsOption ExplicitPublic Key As String

'FileName : OneKeyCol.clsOption Explicit'局部变量,保存集合
Private mCol As CollectionPublic Function Add(Key As String, Optional sKey As String) As OneKeyCls'创建新对象Dim objNewMember As OneKeyClsSet objNewMember = New OneKeyCls'设置传入方法的属性objNewMember.Key = KeyIf Len(sKey) = 0 ThenmCol.Add objNewMemberElsemCol.Add objNewMember, sKeyEnd If'返回已创建的对象Set Add = objNewMemberSet objNewMember = NothingEnd Function'下面 做了 错误处理!当 没有 关键字 的时候 就会返回Nothing了。
Public Property Get Item(vntIndexKey As Variant) As OneKeyClsErr.ClearOn Error GoTo GetItemError'引用集合中的一个元素时使用。'vntIndexKey 包含集合的索引或关键字,'这是为什么要声明为 Variant 的原因'语法:Set foo = x.Item(xyz) or Set foo = x.Item(5)Set Item = mCol(vntIndexKey)Exit PropertyGetItemError:Debug.Print Err.Source & " : Error Was found in Item(vntIndexKey as Variant) as oneKeyCls . " & vbCrLf & Err.Description & " : " & Err.NumberSet Item = Nothing
End PropertyPublic Property Get Count() As Long'检索集合中的元素数时使用。语法:Debug.Print x.CountCount = mCol.Count
End PropertyPublic Sub Remove(vntIndexKey As Variant)'删除集合中的元素时使用。'vntIndexKey 包含索引或关键字,这是为什么要声明为 Variant 的原因'语法:x.Remove(xyz)
mCol.Remove vntIndexKey
End SubPublic Property Get NewEnum() As IUnknown'本属性允许用 For...Each 语法枚举该集合。Set NewEnum = mCol.[_NewEnum]
End PropertyPrivate Sub Class_Initialize()'创建类后创建集合Set mCol = New Collection
End SubPrivate Sub Class_Terminate()'类终止后破坏集合Set mCol = Nothing
End Sub

使用范例:

    Dim Cars As New OneKeyColCars.Add "10.1", "2"Cars.Add "10.2", "20"Cars.Add "10.3", "200"Cars.Add "key"Debug.Print "Count:" & Cars.CountDebug.Print Cars.Item("200").KeyDebug.Print TypeName(Cars.Item("300")) ' Error NothingDim iDim key1 As OneKeyCls'按照 index 索引 进行遍历 ,效率要比下面的方法低一点For i = 1 To Cars.CountSet key1 = Cars.Item(i)Debug.Print key1.KeyNext'推荐这种遍历方法For Each key1 In CarsDebug.Print key1.KeyNext

一下为稍微整理下VB6的 collection 的转载。

Visual Basic 集合对象()
集合是方法将一系列相关的项构成组的一种方法。Visual Basic 中集合可用于跟踪很多事情,例如程序中加载的窗体(窗体集合),或者在窗体中的所有控件(控件集合)。
Visual Basic 提供的类属 Collection 类可用来定义自己的集合。需要多少集合对象,就可以建立多少 Collection 对象- 即 Collection 类的实例。还可使用集合对象作为自己的集合类和对象模型的基础,它将在本章后面的“创建自己的集合类”和“对象模型”中讨论。
例如,集合是跟踪多窗体的最好方法。在“创建用户界面”中的“多文档界面 (MDI) 应用程序”里讨论用户可以打开任何数目文档窗口的应用程序。以下代码段演示如何使用集合对象的 Add 方法,对用户建立的 MDI 子窗体列表进行管理。该代码假定已经存在一个名为 mdiDocument 的窗体,其 MDIChild 属性设置为 True。
'父 MDIForm 中的模块级集合。

Public colDocuments As New Collection
'建立新的 MDI 子文档窗体的代码。
Private Sub mnuFileNew()
Dim f As New mdiDocument
Static intDocumentNumber As Integer
intDocumentNumber = intDocumentNumber 1
'下面的语句创建窗体。
f.Caption = "Document" & intDocumentNumber
'给集合添加对象引用。
colDocuments.Add f
f.Show
End Sub

colDocuments 的作用象是内置窗体集合的一个子集,它只包含窗体 mdiDocument 的一些实例。每添加一个新窗体,自动调节集合的大小。可使用 For Each ... Next 在集合内进行迭代。如果赋予窗体一个可以检索的键,那么可提供一文本字符串作为 Add 方法的第二个参数,如本节后面部分所述。

在变量 colDocuments 的声明中,New 关键字导致当该变量第一次被引用时,在代码中创建集合对象。因为集合是类,而不是数据类型,所以必须建立集合实例,并且在变量中记录对该实例(对象)的引用。
象其它任何对象一样,当包含其引用的最后一个变量被设置成 Nothing 或不可见时,Collection 对象将被撤消。它包含的所有对象引用将被释放。因此,变量 colDocuments 在父 MDIForm 中声明,于是它将存在于程序存活期中的整个过程。
注意 如果使用集合来跟踪窗体,当窗体被卸载之后,应使用集合的 Remove 方法从集合中删除该对象引用。只要对该窗体的引用仍然存在,就不能收回窗体使用的内存,并且 Collection 对象保存的引用象对象变量中的引用一样完好。

集合对象的构成

Collection 对象将每一项存储于 Variants 对象中。于是,能够添加到 Collection 对象里的内容列表就和能够存储到 Variants 中的内容列表是相同的。这包括标准数据类型、对象和数组- 但不包括用户定义类型。
不管 Variants 中存储的是什么,它都占 16 字节,因此使用 Collection 对象不如使用数组的效率高。然而,不能 ReDim 一个 Collection 对象,ReDim Collection 对象能够使代码更清楚、更容易维护。此外,集合对象按键能进行快速的查找,而数组却不能。
注意 准确一点说,即使是把数据存储在其它地方,Variants 也总是只占 16 个字节。例如,如果把字符串或数组赋给 Variants,Variants 将包含一个指向字符串和数组数据备份的指针。在 32 位系统中,指针只使用了 Variants 的 4 个字节,而且 Variants 中实际上不存在数据。
若要存储一个对象,Variants 将包含该对象引用,就象对象变量所做的一样。对字符串和数组来说,也只使用 Variants 的 4 个字节。
数字数据类型存储在 Variants 中。不管什么样的数据类型,Variants 仍然占 16 个字节。
除了 Variants 大小之外,还有很多情况需要使用 Collection 对象来存储上面列出的所有数据类型。应该知道进行权衡:使用 Collection 对象能够编写清楚且容易维护的代码- 所花费的仅是将一些项存储在 Variant 中。

集合对象的属性和方法

每个集合对象都有属性和方法,使用它们能够插入、删除和检索该集合中的项。

属性或方法     描述
Add    方法 给集合添加项。
Count  属性 返回集合中项的数目。只读。
Item   方法 通过索引或关键字,返回项。
Remove 方法 通过索引或关键字,从集合中删除项。

这些属性和方法仅仅是集合最基本的功能。例如,要确保集合只包含一种对象,Add 方法并不能检查将要添加到集合里的对象类型。通过建立自己的集合类能够提供更强健的功能,以及额外的属性、方法和事件,正如本章后面的“创建自己的集合类”中所述。

集合中的增加、删除和检索的基本功能需要关键字和索引。关键字是一个 String 的值。它可以是能转换成字符串的名字、驾驶执照号、社会安全号或者简单的整数。Add 方法允许将关键字与项相关联,如本节后面部分所述。
索引是长整型,介于 1 和集合中项的数目之间。使用 before 和 after 命名的参数,可以控制项索引的初始值,但是随着其它项的增加和删除,其值会发生改变。
注意 索引从 1 开始的集合称为基于 1,如“Visual Basic 中的集合”中所述。
使用索引能够在进行集合的项中迭代。例如,假定变量 mcolEmployees 中包含对集合对象的一个引用,下列代码使用两种方法把 Employee 对象集合中所有雇员的薪水提高 10%。

Dim lngCt As Long
For lngCt = 1 To mcolEmployees.Count
mcolEmployees(lngCt).Rate = _
mcolEmployees(lngCt).Rate * 1.1
Next
Dim emp As Employee
For Each emp In mcolEmployees
emp.Rate = emp.Rate * 1.1
Next

提示 为改善性能,应使用 For Each 对 Collection 对象中的项进行迭代。使用 For Each 迭代要比使用索引快很多倍。这并不是对所有集合都正确- 它取决于集合内部存储数据的方法。

给集合添加项
Add 方法用于将项添加到集合。语法是:

Sub Add (item As Variant [, key As Variant] [, before As Variant]
[, after As Variant] )

例如,使用工作定单 ID 属性作为关键字,将工作定单对象添加到工作定单集合里,代码可编写为:

colWorkOrders.Add woNew, woNew.ID

这里假定 ID 属性是字符串。如果属性是数字(例如 Long),则应使用 CStr 函数将它转换成关键字所要求的字符串值:

colWorkOrders.Add woNew, CStr(woNew.ID)

Add 方法支持命名的参数。为了添加一项作为第三个元素,代码可编写为:

colWorkOrders.Add woNew, woNew.ID, after:=2

可以使用 before 和 after 命名的参数管理有序的对象集合。例如,before:=1 将在集合的开始插入一项,因为集合对象是基于 1 的。

从集合中删除项
Remove 方法用于从集合中删除项。语法是:

object.Remove index

index 参数可以是所删除项在集合中的位置,或者是该项的关键字。如果集合中第三个元素的关键字是“W017493”,则可使用这两条语句中的任何一条删除它:

colWorkOrders.Remove 3
- 或 -
colWorkOrders.Remove "W017493"

 

从集合中检索项

Item 方法用于从集合中检索特定项。语法是:

[Set] variable = object.Item(index)

和 Remove 方法一样, index 可以检索项在集合中的位置,或者是该项的关键字。使用 Remove 方法中的相同示例,这两条语句中的任一条都可检索集合中的第三个元素:

Set woCurrent = colWorkOrders.Item(3)
- 或 -
Set woCurrent = colWorkOrders.Item("W017493")

如果使用整数作为关键字,在将它们传递到 Item 或 Remove 方法之前,必须使用 CStr 函数将其转换成字符串。通常集合对象都假定整数是索引。

提示 Collection 对象不能决定所传递的值是索引还是键。如果想把值解释为键,并且包含该值的变量是除 String 以外的任何值,可以使用 CStr 函数进行转换。如果想把值解释为索引,并且包含该值的变量不是整型数据类型中的一种,使用 CLng 进行转换。
Item 是缺省方法
对于集合对象来说,Item 方法是缺省方法,因此当访问集合中的项时,可忽略它。所以前面的代码示例也可以写成:

Set woCurrent = colWorkOrders(3)
- 或 -
Set woCurrent = colWorkOrders("W017493")

重点 当添加和删除集合对象元素时,集合对象会自动地维护其数字索引编号。因此给定元素的数字索引随之改变。不能在程序中存储数字索引值,并用它检索同一个元素。为达到该目的,应使用键。

使用 Item 方法调用属性和方法
为了使用对象引用,不能从集合中检索该对象引用,并把它放到对象变量中。当对象仍然在集合里时能够使用其引用。
例如,假设上述代码中的 WorkOrder 对象具有 Priority 属性。下面的语句都可用于设置工作定单的优先级:

colWorkOrders.Item("W017493").Priority = 3
colWorkOrders("W017493").Priority = 3

可行的原因是 Visual Basic 要从左到右计算表达式。当遇到 Item 方法时- 显式的或隐式的- Visual Basic 为指定的项(此时是键为 W017493 的 WorkOrder 对象)取得一个引用,并使用该引用计算该行的其余部分。

提示 如果想调用集合中对象的多个属性或方法,首先将该对象引用复制到一个强类型的对象变量中。把引用放到一个强类型的对象变量中,然后使用,比使用集合里对象的引用要快(例如,Dim woCurrent As WorkOrder),因为 Collection 对象是把项存储在 Variants 中。 Variants 中的对象引用总是最后绑定。
详细信息 对很多一般的程序设计任务来说,集合对象也是数组的很有用的可选方案。 请参阅“再论编程”中的“用集合替代数组”。
Visual Basic 提供很多内置集合。有关它们与集合对象的比较,请参阅“Visual Basic 中的集合”。

创建自己的集合类

一般可以采取三种办法用集合来实现对象包含。以上面“对象模型”中所讨论的 SmallBusiness 对象的 Employees 集合为例。为了实现该集合,可以这样做:
在 SmallBusiness 类模块中,将 Employees 变量声明为 As Collection,并使之成为 Public。这是最简单的解决方案

转自:http://blog.sina.com.cn/s/blog_4b168e640100lbma.html

转载于:https://www.cnblogs.com/ayanmw/archive/2012/07/03/2575000.html

VB之Collection---Collection集合类相关推荐

  1. java Collection容器(集合类)

    Java集合框架提供了一套性能优良.使用方便的接口和类,它们位于java.util包中. Collection 表示一组对象,他是集中收集的意思,就是把一组数据收集起来,Collection接口的两个 ...

  2. 集合类(collection、List、Set、Map、HashMap、TreeMap、、Properties、泛型类、可变长参数、增强for循环、Collections、数组与链表)

    集合类 0.集合类概述 1.Collection 概念 (1)Collection接口的API (2)Iterator接口(collection集合的遍历) 案例:collection集合存储学生对象 ...

  3. JAVA学习 API_day02(正则表达式, StringBuider, 包装类, Collection集合类接口)

    正则表达式, 包装类, Collection集合类接口 1.正则表达式 2.StringBuider类 3.包装类 4.Collection接口 1.正则表达式 public final class ...

  4. java 集合 接口_Java集合之Collection接口

    1 - Java集合介绍 /* 1. 一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象 的操作,就要对对象进行存储. 2. 另一方面,使用Array存储对象方面具有一些弊 端,而 ...

  5. Java中Collection和Collections的区别

    1. Collection是集合类的一个顶级接口,其直接继承接口有List与Set 而Collections则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,用于对集合中元素进行排序.搜索以及 ...

  6. java arraycollection_Java集合(三)--Collection、Collections和Arrays

    Collection: Collection是集合类的顶级接口,提供了对集合对象进行基本操作的通用接口方法.Collection接口的意义是为各种具体的集合提供了最大化 的统一操作方式,其直接继承接口 ...

  7. (Java集合框架)集合框架概述和Collection常用功能及遍历

    文章目录 集合概述 集合框架 Collection 常用功能 代码演示 集合遍历 Iterator接口 迭代器的实现原理 增强for 代码演示 集合概述 集合:集合是java中提供的一种容器,可以用来 ...

  8. Collection和Collections之间的使用与区别

    1.Collection详解 2.Collections详解 3.Collection和Collections的区别 1.Collection详解 1.1Collection简介 java.util. ...

  9. JAVA程序设计----集合基础之Collection

    思考题: 1.Set和List有哪些区别? List是有序的可重复的Collection,使用此接口能够精确的控制每个元素插入的位置.能够使用索引高效地访问List中的元素,这类似于Java的数组.S ...

  10. Collection和Collections区别

    1.Collection: 是集合类的上层接口.本身是一个Interface,里面包含了一些集合的基本操作. Collection接口是Set接口和List接口的父接口 Collection接口的方法 ...

最新文章

  1. NSNotification先注册监听,再发送消息
  2. VMware ESXi客户端连接控制台时提示“VMRC控制台连接已断开...正在尝试重新连接“的解决方法
  3. Java 序列化的高级认识
  4. mvnrepository总是出现烦人的one more step验证
  5. 在Kubernetes集群上部署和管理JFrog Artifactory
  6. 一个技术管理者的苦逼【技术管理漫谈】
  7. Vulkan in 30 minutes
  8. 软件工程导论 统一建模语言UML概述
  9. B2C商城系统源码 单商户B2C商城系统源码
  10. 电脑一复制粘贴就卡死_CAD复制粘贴时卡死的解决方法步骤
  11. redis缓存雪崩解决方案六种
  12. 深度解析 intern 方法
  13. python fork()创建新的进程,daemon进程
  14. 计蒜客 428(人人都有极客精神-日期问题)
  15. 比起结果过程更加重要
  16. 体验国际编程大赛(完成报名可抽奖)
  17. Linux中ifconfig的使用
  18. idea常用快捷键图文_如何在Word中的自动图文集词条中添加快捷键
  19. 统一登录验证统一返回格式统一异常处理的实现
  20. 基于Spring Boot+Vue的毕业设计选题管理系统设计与实现

热门文章

  1. 数据分布_数据蒋堂 | 数据分布背后的逻辑
  2. 重要的Python数据分析库
  3. mybatis中的#{}与${}在原理上的区别
  4. [转]mysql下如何执行sql脚本
  5. QCon技术干货:个推基于Docker和Kubernetes的微服务实践
  6. Ansible入门使用
  7. 微信小程序中多个button/view组件中进行切换时改变样式
  8. 源头防堵信息泄露 监管拟全面推行支付标记化
  9. Mysql笔记——DCL
  10. DataRowView 笔记