VBScript中的多维数组过滤

时间:2011-02-15 22:29:26

标签: vbscript multidimensional-array

我正在尝试使用VBScript过滤二维数组,但VBScript的内置“过滤器”功能仅适用于单维数组。我正在使用“rs.GetRows()”数组,那么有一个简单的函数可以使用二维数组吗?

编辑:这不是关于过滤数据库记录,而是关于过滤多维数组。我知道我可以在数据库级别过滤这些记录,但这不是我想要的。所以我正在寻找的是多维数组的过滤函数。

2 个答案:

答案 0 :(得分:2)

Option explicit

' actual function
Public function filter2dArray(a, text)
    Dim i
    For i = ubound(a) to lbound(a) step -1
        If instr(join(a(i), vbTab), text) = 0 Then
            ' no match. switch it with ubound and delete ubound
            a(i) = a(ubound(a))
            ReDim preserve a(ubound(a)-1)
        End If
    Next
    filter2dArray = a
End Function

' test code
Dim b, i
b = array(    array("row1", "monday", "work"), _ 
            array("row2", "tuesday", "work"), _
            array("row3", "wednesday", "free"))

b = filter2dArray(b, "work")

For i = lbound(b) to ubound(b)
    msgbox i & ": " & join(b(i), vbTab)
Next

根据您的要求:2D阵列的过滤功能 限制:它仅适用于文本2d数组,并且没有Include和Compare开关,但这并不难实现。

答案 1 :(得分:0)

如果要求是您不更改临时数据结构,那么循环遍历数组并丢弃不符合您的过滤条件的元素,或者将元素添加到新数组似乎是一个不错的选择。我想如果你选择这种方法,你所处理的记录数量将会产生重大影响。

另一种方法是将您的子集加载到临时表中,然后对其进行过滤。某些代码/数据指示可能有助于提供最佳方法。

希望这有帮助。