2013-08-26 31 views
1

我有2個陣列VB腳本(VBS)陣列基準

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 

之一,我更改其元件

refArray(0) = "foo" 
refArray(1) = "bar" 

說Rnd小於0.5,並執行refArray = array1。我希望array1和refArray都指向同一塊內存,所以當我對refArray進行更改時,它們也應該在array1中可見。

代碼執行我希望陣列1的內容是經過:「富」,「酒吧」,「elem3」。但相反,它保持不變。

我遇到的問題是,vbs不會傳遞對array1或array2的引用,而是將其複製到新數組refArray中,該數組獲取更改並使數組1和2保持不變。

我怎樣才能到數組的引用,並以RefArray內所做的更改應用到引用的對象(通常的Java/C使用)?

謝謝。

回答

2

去本地的VBScript數組的引用的唯一方法是一個Sub /函數調用:

>> 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 

如果不解決您的實際問題 - 順便說一句:什麼你的現實字問題? - 考慮使用對象(Dictionary,System.Collections.ArrayList)來代替。

拼寫出來:

數組賦值副本。只有通過參數傳遞才能引用(本地)數組。如VBScript既不是Ç還是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) 

輸出:

a1: I don't believe this 
a2: solves any real-word problem 
a1: We don't believe this 
a2: solves any real-word problem 

a1: I don't believe this 
a2: solves any real-word problem 
a1: I don't believe this 
a2: solves any real-word problems 
+0

感謝您的輸入,但是這並不能幫助我(可能除了建議使用比其他數組的東西)。我對原來的問題做了修改,希望它更清楚。 –

2

如果您需要參照處理數組,可以考慮使用ArrayList對象,而不是:

>>>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]