中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 求助VBS如何创建集合? 上一主题 | 下一主题
zhoushijay
高级用户

Autowalk


积分 845
发帖 375
注册 2007-3-3
状态 离线
『楼 主』:  求助VBS如何创建集合?

我在编写脚本的时候不止一次的碰到类似的问题了,比如:

q=c(6)
for each w in q
    command
next

function c(x)
for a=1 to 100
    for b=1 to 100
        if a-x=0 or b-x=0 then
           c=ab
        end if
    next
next
end function
这是一个创建了函数 c(x)的代码,c(x)是1至100中所有与6相关的数字的集合
以上代码运行出现错误:c(x) 不是一个集合对象
请问类似的集合对象要怎么创建?
我查阅了大量资料,没发现关于集合的材料,其中最相近的就是字典对象Dictionary,但是对这个对象的用法不熟悉,请高手就以上实例用代码演示一下吧?

[ Last edited by zhoushijay on 2007-5-11 at 12:44 PM ]

2007-5-11 12:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ttyp
初级用户





积分 180
发帖 84
注册 2006-9-7
状态 离线
『第 2 楼』:  

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

2007-5-11 12:40
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zhoushijay
高级用户

Autowalk


积分 845
发帖 375
注册 2007-3-3
状态 离线
『第 3 楼』:  

2楼兄弟跟教材里的一样,能把上面我写的那段代码演示一下吗?不管什么方法都可以

2007-5-11 12:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ttyp
初级用户





积分 180
发帖 84
注册 2006-9-7
状态 离线
『第 4 楼』:  

Set q=c(6)

for each w in q
        msgbox q(w)
next

function c(x)
        Dim d,i
        Set d = CreateObject("Scripting.Dictionary")
        i = 1

        for a=1 to 10
                for b=1 to 10
                        if a-x=0 or b-x=0 then
                           d.add i,a & ":" & b
                           i = i + 1
                        end if
                next
        Next

        Set c = d
end function

   此帖被 +8 点积分        点击查看详情   
评分人:【 zhoushijay 分数: +8  时间:2007-5-11 13:15


2007-5-11 12:59
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
baomaboy
银牌会员





积分 1513
发帖 554
注册 2005-12-30
状态 离线
『第 5 楼』:  

不知这样理解你的意思对不对.
dim d
c(6)
for i=0 To UBound(d)-1
   msgbox d(i)
next
function c(x)
for a=0 to 9
    for b=0 to 9
        if a-x=0 or b-x=0 then
           d=d&a&b&"/"
        end if
    next
next
d = split(d,"/")
end function
[ Last edited by baomaboy on 2007-5-11 at 01:17 PM ]

   此帖被 +6 点积分       点击查看详情   
评分人:【 zhoushijay 分数: +6  时间:2007-5-11 16:49




好多菩提树,好多明镜台。本来好多物,好多的尘埃。
2007-5-11 13:13
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zhoushijay
高级用户

Autowalk


积分 845
发帖 375
注册 2007-3-3
状态 离线
『第 6 楼』:  

4楼高手,我有一事不明,
Set q=c(6)

for each w in q
        msgbox q(w)
next
为什么这里要msgbox q(w) 而不是msgbox(w)
5楼的代码也可以,而且方法很巧妙(可惜今天分数满了不能加了),只是最后多个一个空的元素
不过我跟想学会dictionary的用法

[ Last edited by zhoushijay on 2007-5-11 at 01:22 PM ]

2007-5-11 13:21
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
baomaboy
银牌会员





积分 1513
发帖 554
注册 2005-12-30
状态 离线
『第 7 楼』:  

明天记得给我加啊 ^_^

最后多的空值用减1的方法解决了



好多菩提树,好多明镜台。本来好多物,好多的尘埃。
2007-5-11 13:28
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ttyp
初级用户





积分 180
发帖 84
注册 2006-9-7
状态 离线
『第 8 楼』:  

Set q=c(6)

for each w in q
        msgbox q(w)
next

这里的w是q集合里的key,q(w)是通过key访问该元素的实际内容,可以是任意的对象

2007-5-11 13:44
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 9 楼』:  

想不通……直接用数组不行?还搞那么麻烦。

2007-5-11 13:51
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zhoushijay
高级用户

Autowalk


积分 845
发帖 375
注册 2007-3-3
状态 离线
『第 10 楼』:  

明白了,谢谢ttyp高手,

dictionary就是一个数组,而且是简化了的,直接用数组不是跟麻烦

2007-5-11 13:58
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ttyp
初级用户





积分 180
发帖 84
注册 2006-9-7
状态 离线
『第 11 楼』:  

和数组不一样的,数组没有exists功能啊,dictionary有key可以快速定位元素,key是字符串

2007-5-11 14:13
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 12 楼』:  

直接数组就不要dictionary了……既然一样。。。干什么还搞他出来……中间你用了几次交换。。。c d q

2007-5-11 14:14
查看资料  发短消息 网志   编辑帖子  回复  引用回复
sonicandy
中级用户





积分 273
发帖 91
注册 2007-5-7
状态 离线
『第 13 楼』:  

我觉得可以理解为哈希表,呵呵
类似c++的map和php中的哈希数组.

2007-5-11 22:56
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: