Arrays VB脚本(VBS)数组参考

Arrays VB脚本(VBS)数组参考,arrays,vbscript,reference,Arrays,Vbscript,Reference,我有两个数组 array1 = Array("elem1", "elem2", "elem3") array2 = Array("item1", "item2", "item3") 然后我选择一个数组 Randomize dim refArray if Rnd < 0.5 then refArray = array1 else refArray = array2 end if 假设Rnd小于0.5,则执行REFRARAY=array1。我希望array1和refArra

我有两个数组

array1 = Array("elem1", "elem2", "elem3")
array2 = Array("item1", "item2", "item3")
然后我选择一个数组

Randomize
dim refArray
if Rnd < 0.5 then
    refArray = array1
else
    refArray = array2
end if
假设Rnd小于0.5,则执行REFRARAY=array1。我希望array1和refArray都指向同一块内存,因此当我对refArray进行更改时,它们也应该在array1中可见

在代码执行之后,我希望array1的内容是:“foo”、“bar”、“elem3”。但事实并非如此

我遇到的问题是,vbs没有传递对array1或array2的引用,而是将其复制到新的数组重构中,从而得到更改并保持数组1和2不变

如何获取对数组的引用,并将对refArray所做的更改应用于引用的对象(正常的Java/C用法)


谢谢。

获取本机VBScript数组引用的唯一方法是子函数调用:

>> Sub assignArray(a, i, e)
>>   a(i) = e
>> End Sub
>> array1 = Array("elem1", "elem2", "elem3")
>> array2 = Array("item1", "item2", "item3")
>> WScript.Echo "array1", Join(array1), "array2", Join(array2)
>> assignArray array1, 0, "abra"
>> assignArray array2, 0, "cadabra"
>> WScript.Echo "array1", Join(array1), "array2", Join(array2)
>>
array1 elem1 elem2 elem3 array2 item1 item2 item3
array1 abra elem2 elem3 array2 cadabra item2 item3
如果这不能解决你的实际问题-顺便说一句:什么是你的实际问题考虑使用对象(字典,Soal.Copys.ArayLIST)代替.< /P> 详细说明:

数组分配副本。只能通过参数传递来引用(本机)数组。由于VBscript既不是C语言,也不是Java语言,因此您必须使您的“设计”适应该语言,例如:

Option Explicit

Sub assignArray(a, i, e)
   a(i) = e
End Sub

Randomize

Dim a1 : a1 = Split("I don't believe this")
Dim a2 : a2 = Split("solves any real-word problem")
WScript.Echo "a1:", Join(a1)
WScript.Echo "a2:", Join(a2)
If Rnd < 0.5 Then
   assignArray a1, 0, "We"
Else
   assignArray a2, 3, "problems"
End If
WScript.Echo "a1:", Join(a1)
WScript.Echo "a2:", Join(a2)

获取对本机VBScript数组的引用的唯一方法是子/函数调用:

>> Sub assignArray(a, i, e)
>>   a(i) = e
>> End Sub
>> array1 = Array("elem1", "elem2", "elem3")
>> array2 = Array("item1", "item2", "item3")
>> WScript.Echo "array1", Join(array1), "array2", Join(array2)
>> assignArray array1, 0, "abra"
>> assignArray array2, 0, "cadabra"
>> WScript.Echo "array1", Join(array1), "array2", Join(array2)
>>
array1 elem1 elem2 elem3 array2 item1 item2 item3
array1 abra elem2 elem3 array2 cadabra item2 item3
如果这不能解决你的实际问题-顺便说一句:什么是你的实际问题考虑使用对象(字典,Soal.Copys.ArayLIST)代替.< /P> 详细说明:

数组分配副本。只能通过参数传递来引用(本机)数组。由于VBscript既不是C语言,也不是Java语言,因此您必须使您的“设计”适应该语言,例如:

Option Explicit

Sub assignArray(a, i, e)
   a(i) = e
End Sub

Randomize

Dim a1 : a1 = Split("I don't believe this")
Dim a2 : a2 = Split("solves any real-word problem")
WScript.Echo "a1:", Join(a1)
WScript.Echo "a2:", Join(a2)
If Rnd < 0.5 Then
   assignArray a1, 0, "We"
Else
   assignArray a2, 3, "problems"
End If
WScript.Echo "a1:", Join(a1)
WScript.Echo "a2:", Join(a2)

如果需要按引用处理数组,请考虑使用对象代替:

>>> Set a1 = CreateObject("System.Collections.ArrayList")
>>> a1.Add 1
>>> a1.Add 2
>>> a1.Add 3
>>> WScript.Echo "[" & Join(a1.ToArray, ",") & "]"
[1,2,3]
>>> Set a2 = a1
>>> a2(1) = 4
>>> WScript.Echo "[" & Join(a2.ToArray, ",") & "]"
[1,4,3]
>>> WScript.Echo "[" & Join(a1.ToArray, ",") & "]"
[1,4,3]
>Set a1=CreateObject(“System.Collections.ArrayList”)
>>>a1.加入1
>>>a1.加上2
>>>a1.加入3
>>>WScript.Echo“[”和Join(a1.ToArray,”,”&“)
[1,2,3]
>>>设置a2=a1
>>>a2(1)=4
>>>WScript.Echo“[”和Join(a2.ToArray,”,”&“)
[1,4,3]
>>>WScript.Echo“[”和Join(a1.ToArray,”,”&“)

[1,4],3] < /> > > p>如果需要按引用处理数组,请考虑使用对象:

>>> Set a1 = CreateObject("System.Collections.ArrayList")
>>> a1.Add 1
>>> a1.Add 2
>>> a1.Add 3
>>> WScript.Echo "[" & Join(a1.ToArray, ",") & "]"
[1,2,3]
>>> Set a2 = a1
>>> a2(1) = 4
>>> WScript.Echo "[" & Join(a2.ToArray, ",") & "]"
[1,4,3]
>>> WScript.Echo "[" & Join(a1.ToArray, ",") & "]"
[1,4,3]
>Set a1=CreateObject(“System.Collections.ArrayList”)
>>>a1.加入1
>>>a1.加上2
>>>a1.加入3
>>>WScript.Echo“[”和Join(a1.ToArray,”,”&“)
[1,2,3]
>>>设置a2=a1
>>>a2(1)=4
>>>WScript.Echo“[”和Join(a2.ToArray,”,”&“)
[1,4,3]
>>>WScript.Echo“[”和Join(a1.ToArray,”,”&“)

[1,4,3]
感谢您的输入,但这对我没有帮助(除了建议使用数组以外的其他东西)。我对原来的问题做了修改,希望能更清楚。谢谢你的意见,但这对我没有帮助(除了建议使用数组以外的其他东西)。我对原来的问题作了修改,希望能更清楚。