Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 为数组(VBS)中的现有项指定新值_Arrays_Vbscript - Fatal编程技术网

Arrays 为数组(VBS)中的现有项指定新值

Arrays 为数组(VBS)中的现有项指定新值,arrays,vbscript,Arrays,Vbscript,list.item(0)返回一个数组。这就是为什么我能加入它。我需要更改数组的一个值。显然是行不通的。为什么? 编辑 我发现如果我这样做了,它会起作用 Option Explicit dim list Set list = CreateObject("System.Collections.ArrayList") list.Add split("Banana;Apple;Pear",";") WScript.Echo join(list.item(0), ", ") ' --> Ban

list.item(0)
返回一个数组。这就是为什么我能加入它。我需要更改数组的一个值。显然是行不通的。为什么?

编辑

我发现如果我这样做了,它会起作用

Option Explicit

dim list
Set list = CreateObject("System.Collections.ArrayList")
list.Add split("Banana;Apple;Pear",";")

WScript.Echo  join(list.item(0), ", ") ' --> Banana, Apple, Pear

WScript.Echo  list.item(0)(0)          ' --> Banana

list.item(0)(0) = "Cherry"
WScript.Echo  list.item(0)(0)          ' --> Banana (Why not Cherry?)

本机VBScript数组副本的分配。证据:

Dim arr 
arr = list.item(0)
arr(0) = "Cherry"
list.item(0) = arr
>> Dim a : a = Split("a b c")
>> Dim b : b = a
>> b(0) = "A"
>> WScript.Echo Join(a)
>> WScript.Echo Join(b)
>>
a b c
A b c
Split()返回VBScript数组。您可以将其分配给列表(0),但这会给列表(0)一个副本。证据:

Dim arr 
arr = list.item(0)
arr(0) = "Cherry"
list.item(0) = arr
>> Dim a : a = Split("a b c")
>> Dim b : b = a
>> b(0) = "A"
>> WScript.Echo Join(a)
>> WScript.Echo Join(b)
>>
a b c
A b c
您的表达式<代码>列表。项(0)-或不太麻烦的:
语句中的列表(0)

>> Dim list : Set list = CreateObject("System.Collections.ArrayList")
>> Dim a    : a        = Split("a b c")
>> list.Add a
>> a(0) = "A"
>> WScript.Echo Join(a)
>> WScript.Echo Join(list(0))
>>
A b c
a b c
引用列表中数组的副本,将“Cherry”指定给其第一个元素不会更改列表中的“original”。证据:你的代码

你能做什么

(1) 从列表(0)获取副本,更改副本,将(完整)副本分配给列表(0):

(2) 避免使用VBScript数组,而是使用ArrayList(或字典,或任何未在分配时复制的集合):

>> Dim list1 : Set list1 = CreateObject("System.Collections.ArrayList")
>> Dim list2 : Set list2 = CreateObject("System.Collections.ArrayList")
>> list2.Add "Banana"
>> list2.Add "Apple"
>> list1.Add list2
>> WScript.Echo Join(list1(0).ToArray())
>> list1(0)(0) = "Cherry"
>> WScript.Echo Join(list1(0).ToArray())
>>
Banana Apple
Cherry Apple