2011-02-15 34 views
4

我想用VBScript過濾一個二維數組,但VBScript的內置「過濾器」函數只適用於一維數組。我正在使用一個「rs.GetRows()」數組,所以有一個簡單的函數可以用於二維數組嗎?VBScript中的多維數組過濾

編輯:這不是關於過濾數據庫記錄,它是關於過濾多維數組。我知道我可以在數據庫級別過濾這些記錄,但那不是我想要的。所以我在尋找的是一個多維數組的過濾函數。

+0

ADO記錄集本身具有[`filter`](http://www.w3schools.com/ado/prop_rs_filter.asp)屬性。你可以在返回行之前過濾記錄集嗎? – 2011-02-16 09:07:44

回答

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陣列的過濾功能。
限制:它只適用於文本二維數組,它沒有包含和比較開關,但這並不難實現。

0

如果要求是不改變臨時數據結構,那麼循環遍歷數組並放棄不符合過濾條件的元素,或者將元素添加到新數組似乎是一個不錯的選擇。如果你選擇這種方法,我想你處理的記錄數量會有很大的影響。

另一種方法是將您的子集加載到臨時表中,然後對其執行過濾。數據的某些代碼/指示可能有助於通知最佳方法。

希望這會有所幫助。