我想用VBScript過濾一個二維數組,但VBScript的內置「過濾器」函數只適用於一維數組。我正在使用一個「rs.GetRows()」數組,所以有一個簡單的函數可以用於二維數組嗎?VBScript中的多維數組過濾
編輯:這不是關於過濾數據庫記錄,它是關於過濾多維數組。我知道我可以在數據庫級別過濾這些記錄,但那不是我想要的。所以我在尋找的是一個多維數組的過濾函數。
我想用VBScript過濾一個二維數組,但VBScript的內置「過濾器」函數只適用於一維數組。我正在使用一個「rs.GetRows()」數組,所以有一個簡單的函數可以用於二維數組嗎?VBScript中的多維數組過濾
編輯:這不是關於過濾數據庫記錄,它是關於過濾多維數組。我知道我可以在數據庫級別過濾這些記錄,但那不是我想要的。所以我在尋找的是一個多維數組的過濾函數。
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陣列的過濾功能。
限制:它只適用於文本二維數組,它沒有包含和比較開關,但這並不難實現。
如果要求是不改變臨時數據結構,那麼循環遍歷數組並放棄不符合過濾條件的元素,或者將元素添加到新數組似乎是一個不錯的選擇。如果你選擇這種方法,我想你處理的記錄數量會有很大的影響。
另一種方法是將您的子集加載到臨時表中,然後對其執行過濾。數據的某些代碼/指示可能有助於通知最佳方法。
希望這會有所幫助。
ADO記錄集本身具有[`filter`](http://www.w3schools.com/ado/prop_rs_filter.asp)屬性。你可以在返回行之前過濾記錄集嗎? – 2011-02-16 09:07:44