dim a;
a(0)=migration
a(1)=blue
a(2)=syntax
a(3)=green
dim d;
set d=createobject(scripting.dictionary)
for i=0 to UBOUND(a)
msgbox a(i)
d.add a(i),a(i+1)
next
在VBSCRIPTING中,请解释任何一个为什么我得到一个“错误下标超出范围”,以添加内容到字典。我必须将数组内容添加到字典
答案 0 :(得分:2)
您的Dim a
声明一个普通的Variant(并将其初始化为Empty)。您的a(i)=whatever
(尝试)使用a
作为变种数组。将您的代码更改为:
>> Dim a(3)
>> a(0)="zero"
>> a(1)="one"
>> a(2)="zwei"
>> a(3)="last of four"
(标记引号!和;根本不存在!)以获得有用的固定数组。然后重新考虑(并发布)你希望如何将数组中的信息转换为字典 - 就像现在一样,表达式a(i+1)
应该抛出一个错误,因为{{1}中不能有一个i + 1元素1}}当我到达a
。
答案 1 :(得分:1)
Ekkehard.Horner已经指出导致错误的原因(+1),但也许还有一些解释。
你有一个包含4个元素的数组:
a(0) = "migration"
a(1) = "blue"
a(2) = "syntax"
a(3) = "green"
由于VBScript数组是从零开始的,因此该数组的上限为3.当您在这样的循环中迭代数组时:
For i = 0 To UBound(a) 'remember: UBound(a) == 3
d.Add a(i), a(i+1)
Next
展开的循环执行以下操作:
d.Add a(0), a(1)
d.Add a(1), a(2)
d.Add a(2), a(3)
d.Add a(3), a(4)
数组的上限为3,因此尝试访问索引4处的元素会导致subscript out of range
错误,这基本上意味着您正在尝试访问数组边界外的数组索引。
如果您的循环在当前索引之后处理元素,则必须停止在倒数第二个索引处理,即您需要将循环更改为:
For i = 0 To UBound(a)-1
d.Add a(i), a(i+1)
Next