使用AutoIt在Scripting.Dictionary对象中创建空数组

时间:2014-12-24 20:21:18

标签: arrays dictionary autoit

有没有办法可以用这种方式在字典中创建数组(不先创建变量):

Local $myDictionary = ObjCreate("Scripting.Dictionary")
$myDictionary.Add("firstDictionary", ObjCreate("Scripting.Dictionary")) ;this is ok
$myDictionary.Add("firstarray", []) ;this is wrong

_ArrayAdd($myDictionary.Item("firstArray"), "first element in firstArray")
_ArrayAdd($myDictionary.Item("firstArray"), "second element in firstArray")

这会导致弹出一个"表达式错误" 不应该[]返回一个空的大小数组吗?

由于某些原因,当数组在字典中时,我无法添加元素:

Local $newArray[1]
Local $myDictionary = ObjCreate("Scripting.Dictionary")

_ArrayAdd($newArray,101) ;this is ok
$myDictionary.Add("firstArray", $newArray)

;_ArrayAdd($myDictionary.Item("firstArray"), 102)  ; this is wrong
_ArrayAdd(($myDictionary.Item("firstArray")), 102)  ; this does not change the dictionary array
_ArrayDisplay(($myDictionary.Item("firstArray")))  ; this still shows 101

1 个答案:

答案 0 :(得分:0)

除了使用返回数组的函数之外,没有办法在字典对象中创建数组(StringSplit是一种常见的选择)。

像这样传递字典项ByRef很有意思。

因为你必须将它括在括号中(如($dict.Item("foo"))),它会计算表达式,所以你传递的内容实际上并不是一个引用。没有理由在理论上没有这些括号的情况下你无法通过它,但是AutoIt还没有那个功能(而且从Jon过去所说的,更新COM接口代码是一场噩梦)。

解决方案是升级到最新的测试版并使用地图,这是一个像AutoIt内置的字典集。

或者,你必须使用3行,创建一个临时数组,然后在添加:

后重新分配它
Local $a = $dict.Item("foo")
_ArrayAdd($a, "world")
$dict.Item("foo") = $a