vb6 Collection对象有长度??

itneste 2011-04-06 02:10:37

dim list as new Collection,i as interger
for i=0 to 6000
list.add(i)
next

当list的count到达256时就不能再添加了,list最大长度就是256?vb6中还有什么集合类似于collection,可以使用add和remove方法的,如果自己定义一个类,实现remove方法,remove的实现方法是不是删除一个元素,然后后面的元素前移?如果我的操作涉及到很频繁的移动,该怎么办?vb中能使用指针?
...全文
264 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
神马都能聊 2011-04-06
  • 打赏
  • 举报
回复
Cellection对象不存在你说的问题。

自己写一个倒是不错,支持一下。
itneste 2011-04-06
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 king06 的回复:]

引用 6 楼 itneste 的回复:
引用 5 楼 sysdzw 的回复:

引用 3 楼 itneste 的回复:

如果我打算用数组做一个类似于collection的类,实现add和remove方法,remove方法在实现的时候是不是删除一个元素,然后后面的元素前移?类似于顺序表?vb中能不能使用指针,能不能做成单链表??
集合就是一堆数字在一起,它和数组还是有区别的,数组有顺……
[/Quote]


呵呵,我的意思没有表达清楚。
我知道数组没有add和remove方法。
现在我写一个类,不用collection,实现和collection一样的功能。

private container() as byte

public property Get PContainer() as byte()
PContainer=container
end property

public sub Add(byref data() as byte)
'增加的方法,这里增加的是数组
end sub
public sub Remove(byval startIndex as integer,byval count as integer)
'删除的方法,在删除方法中我需要从container数组中删除某些元素,所以我想这样做:假如删除从第一个元素开始到第10个元素,
dim temp() as byte,i as integer
redim temp(ubound(container)-count)
for i=0 to ubound(container)
if i>startindex and i<startindex+count then
'说明这些数据应该删除
else
'这些数据要保留
end if
next
end sub

我的意思像上面代码中那样,如果现在我写了这么一个类,删除的时候用到了类似于数组的复制,这样会不会太慢?有没有更好的方法?类似于数据结构中单链表那样的用指针来实现?
king06 2011-04-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 itneste 的回复:]
引用 5 楼 sysdzw 的回复:

引用 3 楼 itneste 的回复:

如果我打算用数组做一个类似于collection的类,实现add和remove方法,remove方法在实现的时候是不是删除一个元素,然后后面的元素前移?类似于顺序表?vb中能不能使用指针,能不能做成单链表??
集合就是一堆数字在一起,它和数组还是有区别的,数组有顺序概念,集合是没有的。 对于collecti……
[/Quote]
数组没有add和remove方法,倒是有个redim preserve声明方式可以扩大数组.
监视窗口和立即窗口能显示的字符数量比较有限.
itneste 2011-04-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sysdzw 的回复:]

引用 3 楼 itneste 的回复:

如果我打算用数组做一个类似于collection的类,实现add和remove方法,remove方法在实现的时候是不是删除一个元素,然后后面的元素前移?类似于顺序表?vb中能不能使用指针,能不能做成单链表??
集合就是一堆数字在一起,它和数组还是有区别的,数组有顺序概念,集合是没有的。 对于collection而言remove就是删除其中的某个元素……
[/Quote]

恩 有道理
我说数组那个是想用数组作为存储的介质,然后实现remove方法。想寻求remove方法的方法。


list没有长度限制,不过如果添加监视窗口的话他就显示256个,其余的都不是显示了。但是确是存在的。。

谢谢
无·法 2011-04-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 itneste 的回复:]

如果我打算用数组做一个类似于collection的类,实现add和remove方法,remove方法在实现的时候是不是删除一个元素,然后后面的元素前移?类似于顺序表?vb中能不能使用指针,能不能做成单链表??
[/Quote]集合就是一堆数字在一起,它和数组还是有区别的,数组有顺序概念,集合是没有的。 对于collection而言remove就是删除其中的某个元素,不存在前移的概念。 建议楼主巩固巩固基础,你好像学数据结构学的混淆了。
无·法 2011-04-06
  • 打赏
  • 举报
回复
[Quote=引用楼主 itneste 的回复:]
VB code

dim list as new Collection,i as interger
for i=0 to 6000
list.add(i)
next


当list的count到达256时就不能再添加了,list最大长度就是256?vb6中还有什么集合类似于collection,可以使用add和remove方法的,如果自己定义一个类,实现remove方法,remove的实现方法……
[/Quote]我这边可以添加的。楼主说“到达256时就不能再添加了”的依据是什么?另外你的interger写错了,应该是integer。

和collection类似的对象是字典。
dim dic as object
set dic = createobject("scripting.dictionary")
同样也可以add和remove方法,不过用法稍有不同。
参考:
http://download.csdn.net/source/1679235
依次展开:Windows 脚本技术 -> 脚本运行时库 -> Dictionary 对象
itneste 2011-04-06
  • 打赏
  • 举报
回复
如果我打算用数组做一个类似于collection的类,实现add和remove方法,remove方法在实现的时候是不是删除一个元素,然后后面的元素前移?类似于顺序表?vb中能不能使用指针,能不能做成单链表??
itneste 2011-04-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dbcontrols 的回复:]

Dictionary 对象


描述

对象,用于存储数据关键字和条目对。

语法

Scripting.Dictionary

说明

Dictionary 对象与 PERL 关联数组等价。可以是任何形式的数据的条目被存储在数组中。每个条目都与一个唯一的关键字相关联。该关键字用来检索单个条目,通常是整数或字符串,可以是除数组外的任何类型。……
[/Quote]
当list的count到达256时就不能再添加了,list最大长度就是256?
如果自己定义一个类,实现remove方法,remove的实现方法是不是删除一个元素,然后后面的元素前移?如果我的操作涉及到很频繁的移动,该怎么办?vb中能使用指针?
dbcontrols 2011-04-06
  • 打赏
  • 举报
回复
Dictionary 对象


描述

对象,用于存储数据关键字和条目对。

语法

Scripting.Dictionary

说明

Dictionary 对象与 PERL 关联数组等价。可以是任何形式的数据的条目被存储在数组中。每个条目都与一个唯一的关键字相关联。该关键字用来检索单个条目,通常是整数或字符串,可以是除数组外的任何类型。

下面的代码举例说明了如何创建一个 Dictionary 对象:

Dim d '创建一个变量
Set d = CreateObject(Scripting.Dictionary)
d.Add "a", "Athens" '添加一些关键字和条目
d.Add "b", "Belgrade"
d.Add "c", "Cairo"
...

net的最近面试经典试题ASP.NET面试题集合 1. 简述 private、 protected、 public、 internal 修饰符的访问权限。 答 . private : 私有成员, 在类的内部才可以访问。 protected : 保护成员,该类内部和继承类中可以访问。 public : 公共成员,完全公开,没有访问限制。 internal: 在同一命名空间内可以访问。 2 .列举ASP.NET 页面之间传递值的几种方式。 答. 1.使用QueryString, 如....?id=1; response. Redirect().... 2.使用Session变量 3.使用Server.Transfer 3. 一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少, 用递归算法实现。 答:public class MainClass { public static void Main() { Console.WriteLine(Foo(30)); } public static int Foo(int i) { if (i 0 && i <= 2) return 1; else return Foo(i -1) + Foo(i - 2); } } 4.C#中的委托是什么?事件是不是一种委托? 答 : 委托可以把一个方法作为参数代入另一个方法。 委托可以理解为指向一个函数的引用。 是,是一种特殊的委托 5.override与重载的区别 答 : override 与重载的区别。重载是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要 Override 是进行基类中函数的重写。为了适应需要。 6.如果在一个B/S结构的系统中需要传递变量值,但是又不能使用Session、Cookie、Application,您有几种方法进行处理? 答 : this.Server.Transfer 7.请编程遍历页面上所有TextBox控件并给它赋值为string.Empty? 答: foreach (System.Windows.Forms.Control control in this.Controls) { if (control is System.Windows.Forms.TextBox) { System.Windows.Forms.TextBox tb = (System.Windows.Forms.TextBox)control ; tb.Text = String.Empty ; } } 8.请编程实现一个冒泡排序算法? 答: int [] array = new int ; int temp = 0 ; for (int i = 0 ; i < array.Length - 1 ; i++) { for (int j = i + 1 ; j < array.Length ; j++) { if (array[j] < array) { temp = array ; array = array[j] ; array[j] = temp ; } } } 9.描述一下C#中索引器的实现过程,是否只能根据数字进行索引? 答:不是。可以用任意类型。 10.求以下表达式的值,写出您想到的一种或几种实现方法: 1-2+3-4+……+m [Page] 答: int Num = this.TextBox1.Text.ToString() ; int Sum = 0 ; for (int i = 0 ; i < Num + 1 ; i++) { if((i%2) == 1) { Sum += i ; } else { Sum = Sum - I ; } } System.Console.WriteLine(Sum.ToString()); System.Console.ReadLine() ; 11.用.net做B/S结构的系统,您是用几层结构来开发,每一层之间的关系以及为什么要这样分层? 答:一般为3层 数据访问层,业务层,表示层。 数据访问层对数据库进行增删查改。 业务层一般分为二层,业务表观层实现与表示层的沟通,业务规则层实现用户密码的安全等。 表示层为了与用户交互例如用户添加表单。 优点: 分工明确,条理清晰,易于调试,而且具有可扩展性。 缺点: 增加成本。 12.在下面的例子里 using Sy
求交集和并集的线性算法(原创) 对于给定的两个集合,使用哈希表可以在线性时间复杂度内得到他们的交集和并集,具体说明如下: 假设有集合A={1, 7, 5, 13, 9, 10, 11}, B={5, 7, 10, 1, 18, 12}, 1)求交集,需要得到结果:A∩B={1, 5, 7,10} 思路如下: ①建立一个哈希表(HashTable),其键(KEY)表示集合中数字的值,其值(VALUE)表示集合中数字出现的次数 ②遍历集合A,将集合中的每个数字(KEY)插入哈希表,每个数字的出现次数(VALUE)设置为1 ③遍历集合B,对于集合中的每个数字: 如果哈希表中已经存在该数字,将对应的VALUE改为2 如果哈希表中不存在该数字,忽略 ④遍历哈希表,输出VALUE为2的数字,即得到A和B的交集 2) 求并集,需要得到结果:AUB={1,5,7,9,10,11,12,13,18} 思路如下: ①建立一个哈希表(HashTable),其键(KEY)表示集合中数字的值,其值(VALUE)可以无视 ②遍历集合A,将集合中的每个数字(KEY)插入哈希表 ③遍历集合B,对于集合中的每个数字: 如果哈希表中已经存在该数字,忽略 如果哈希表中不存在该数字,将这个数字插入哈希表 ④遍历哈希表,输出哈希表中的每个KEY,即为A和B的并集 上面以两个集合为例说明了交集和并集的求法,事实上,上述算法可以很方便的扩展到3个或3个以上的集合 的求交集和求并集。另外求并集时,由于哈希表的值(VALUE)部分不需要用到,所以这个数据结构也可以更换为 哈希集(HashSet)。 转载请注明出处。 VB中HashTable 2012-08-20 14:43:21| 分类: asp.net|举报|字号 订阅 首先定义一个hashtable Dim hstl As New Hashtable hstl.Add(key, value) 'java是用.put MS开始全面模仿java 这说说vb.net中的hashtable基本用法: 添加值:hstl.add(key,value) 通过key取值: hstl.Item(key).ToString 判断是否含有Key: ContainsKey(key) 判断是否含有value: ContainsValue(value) 遍历hashtable: Dim de As DictionaryEntry '泛型类 For Each de In hstl console.write(de.key & de.value) Next de hashtable不支持通过value取key. 求2个集合的交集 第一种方法 最简单、粗暴的循环遍历2个集合,判断如果有相同的元素就取出来。假设集合1的长度为M,集合2的长度为N,那么,时间复杂度为:O(M*N) 代码: public static List GetIntersection(List list1, List list2) { List list3 = new List(); //第一种方法:循环遍历 //O(n×m) for (int i = 0; i < list1.Count; i++) { for (int j = 0; j < list2.Count; j++) { if (list1[i]==list2[j]) { list3.Add(list1[i]); } } } return list3; } 第二种方法 利用hash这种很有用的数据结构来实现。我们知道,hash的特点之一就是不允许有重复元素,即hash表中的元素都是唯一的。所以,我们的思路就是:先把第一个集合的所有元素都放进hashSet中,时间复杂度O(M);再把第二个集合中的元素放进hashSet中,如果有重复元素,就是这2个集合的交集,时间复杂度为O(N)。即总的时间复杂度从O(M*N)降低到了O(M+N)。 代码: public static List GetIntersection2(List list1, List list2) { //第二种方法:hash List list3 = new List(); HashSet hashSet = new HashSet(); foreach (string item in list1) { hashSet.Add(item); } foreach (string item in list2) { if (hashSet.Add(item) == false) { list3.Add(item); } } return list3; } 测试 代码: static void Main(string[] args) { List list1 = new List(); list1.Add("apple"); list1.Add("banana"); list1.Add("pear"); list1.Add("orange"); list1.Add("grape"); List list2 = new List(); list2.Add("nokia"); list2.Add("sumsung"); list2.Add("htc"); list2.Add("apple"); list2.Add("orange"); List list =new List(); //test for two set join //list = TwoSetsIntersection.GetIntersection(list1, list2); list = TwoSetsIntersection.GetIntersection2(list1, list2); foreach (string item in list) { Console.Write(item + "\t"); } } 总结 hash的另一个特点是查找效率为O(1),惊人的高! 对于这道题目要是算出来O(M*N)的同学就应该补课了。出来混,迟早要还的。 HashSet类 HashSet类主要是设计用来做高性能集运算的,例如对两个集合求交集、并集、差集等。集合中包含一组不重复出现且无特性顺序的元素。 HashSet的一些特性如下: 1、HashSet中的值不能重复且没有顺序。 2、HashSet的容量会按需自动添加。 构造方法: HashSet() 默认相等比较器创建一个空的新实例。 HashSet(IEnumerable collection)  把指定集合中的collection中的数据复制到集中 HashSet(IEqualityComparer comparer)  使用指定的相等比较器创建一个空的新实例 HashSet(IEnumerable collection,IEqualityComparer comparer)  使用指定的比较器实例化数据,且将指定集合中的元素复制到集合中。 因为HashSet是专门设计来做集合运算的,因此它提供的方法中有不少是和集合运算相关的。 以下给出它的一些常用方法介绍 成员        类型        说明 Add        方法        将指定的元素添加到集合中 Clear        方法         清空集合中的所有元素 Contains     方法         确定某元素是否在HashSet中 Exists       方法         确定HashSet是否包含于指定条件相匹配的元素 ExceptWith    方法         从当前HashSet移除指定集合中的所有元素 IntersectWith   方法        修改当前的HashSet对象,以仅包含该对象和指定集合中存在的元素 IsProperSubsetOf  方法        确定HashSet对象是否为指定集合的真子集 IsProperSupersetOf 方法        确定HashSet对象是否为指定集合的真超集 IsSunsetOf     方法         确定HashSet对象是否为指定集合的子集 IsSupersetOf    方法         确定HashSet对象是否为指定集合的超集 Remove      方法         从HashSet对象中移除指定的元素 RemoveWhere   方法         从HashSet集合中移除与指定谓词所定义的条件相匹配的所有元素 SetEquals     方法         确定HashSet对象与指定的集合中是否包含相同的元素 SynmmetricExceptWith  方法     修改当前的HashSet对象,以仅包含该对象或指定集合中存在的元素 TrimExcess    方法         将HashSet对象的容量设置为它所包含的元素的实际个数,向上舍入为接近的特性与实现的值。 UnionWith     方法         修改当前的HashSet对象,以包含该对象本身和指定集合中存在的所有元素 给个简单的例子,写不完的,总之记得HashSet主要的作用是用来进行,交集、并集等运算的就OK了。 static void Main(string[] args) { HashSet hs = new HashSet(); hs.Add("你"); hs.Add("好"); hs.Add("吗"); HashSet hs1 = new HashSet(); hs1.Add("你"); hs1.Add("好"); bool b = hs1.IsProperSubsetOf(hs); //确定hs1是否是hs的真子集 Console.WriteLine(b); //输出True HashSet hs2 = new HashSet(); hs2.Add("爱你"); IEnumerable list = hs.Union(hs2); //返回并集 foreach (string str in list) { Console.WriteLine(str); //输出 你 好 吗 爱你 } Console.ReadKey(); }

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧