2

似乎更“复杂”的 ArrayLists 没有被广泛使用,因为我找不到任何关于它的具体、有用的信息。

我正在尝试创建一个数组的 ArrayList(以及最终的数组 ArrayLists 的 ArrayList),但我似乎无法将数组添加到 ArrayList 或访问数组的元素。所有这些都是在 QTP 中使用 VBScript 完成的。

(代码从 Excel 文件中读取,运行良好。)

Set my_sheet = ExcelObject.sheets.item(testCaseSheet)
testCase     = CreateObject("System.Collections.ArrayList")

Function getTestsCaseActions (row, col)
    Do While my_sheet.cells(row, 2).Value <> ""
        MsgBox tempArray(0) & " -> " & tempArray(1) 'WORKS FINE - THE VALUES ARE PRINTED
        testCase.Add tempArray

        row = row+2
    Loop
    End Function

getTestsCaseActions 3, 4

'This is not working - how do I access the arrays and their values in the arraylist?
For Each ArrayItem in testCase
    MsgBox ArrayItem(0)' & ", " & ArrayItem(1)
    'MsgBox "Hey!"
Next

现在,我意识到这For Each ArrayItem in testCase可能是错误的,但我不知道该使用什么?毕竟,添加到 ArrayList 的元素是数组。如果我取消注释该行MsgBox "Hey!",它只写一次,即使 ArrayList 应该有 3 个数组。

4

1 回答 1

1

简短回答:如果您只需要读取访问权限(在成功初始化之后),使用 ArrayList Of Arrays 的正确方法:

Option Explicit

Dim alA : Set alA = CreateObject("System.Collections.Arraylist")
alA.add Split("A B C")
alA.add Split("D E F")
alA.add Split("I J K")
WScript.Echo "---- For Each In"
Dim aX
For Each aX In alA
    WScript.Echo TypeName(aX), Join(aX)
Next
WScript.Echo "---- For To"
Dim i
For i = 0 To alA.Count - 1
    WScript.Echo TypeName(alA(i)), Join(alA(i))
Next

输出:

cscript 19915175.vbs
---- For Each In
Variant() A B C
Variant() D E F
Variant() I J K
---- For To
Variant() A B C
Variant() D E F
Variant() I J K

ReDim 保留答案(UBound(answer) + 1):

ArrayList Of ArrayLists of Arrays 没有问题(只要我们谈论的是读访问,你不要搞砸了):

Dim alB : Set alB = CreateObject("System.Collections.Arraylist")
alB.Add alA
WScript.Echo "alB(0)(0)(0) =>", alB(0)(0)(0)
WScript.Echo "alB(0)(2)(2) =>", alB(0)(2)(2)

输出:

alB(0)(0)(0) => A
alB(0)(2)(2) => K
于 2013-11-11T21:11:44.823 回答