2010-03-22 88 views
0

我需要一種快速搜索大型2維數組的方法。我從Excel中提取數組,所以1維表示行,第二維表示列。我希望獲得列匹配某些標準的行的列表。我需要知道行號(或數組的索引)。2維數組的快速部門

例如,如果我從excel中提取範圍。我可能需要找到列A =「dog」和列B = 7和列J>「a」的所有行。我只知道在運行時要找到哪些列和哪個值,所以我無法對列索引進行硬編碼。

我可以使用一個簡單的循環,但這是否有效?我需要運行數千次,每次搜索不同的標準。

 For r As Integer = 0 To UBound(myArray, 0) - 1 
     match = True 
     For c = 0 To UBound(myArray, 1) - 1 
      If not doesValueMeetCriteria(myarray(r,c) then 
       match = False 
       Exit For 
      End If 
     Next 
     If match Then addRowToMatchedRows(r) 
    Next 

doesValueMeetCriteria函數是一個簡單的函數,它根據查詢需求檢查數組元素的值。例如列A =狗等

從數組中創建一個數據表並使用.select方法更加有效嗎?

我可以用某種方式使用Linq嗎?

也許某種形式的字典或哈希表?

或者是最有效的簡單循環?

您的建議非常受歡迎。

+0

您的代碼看起來似乎需要檢查每一行的每一列,但是您的描述似乎並非需要檢查所有列。這是什麼? – egrunin 2010-03-22 15:50:00

+0

有可能檢查每一列。哪些列被檢查是動態決定。 – Tim 2010-03-22 16:48:58

回答

0

不知道究竟是你想在這裏實現什麼,有幾件事情浮現在腦海中......既然你說這是一個大分貝,你至少應該對你的數組進行排序。然後你可以對它進行「冒泡排序」,找到最初的選擇標準,大大減少了你現在所有的強制循環。

此外,由於這是來自EXCEL電子表格,所以也許您可以讓電子表格執行一些或所有的工作,然後獲取數據。

HASTABLE需要一個唯一的KEY,好像你可能在行中複製單元格數據;我知道沒有辦法要求HASHTABLE根據「密鑰> ='a'返回值」

如果您打算根據各種不同標準進行搜索,您可能會保存你自己做了很多工作,並將數據抽入數據庫表,這樣你就可以根據需要帶上SQL。