2014-03-05 46 views
-1

我已經創建了一個代碼來處理從一臺服務器到另一臺服務器的數據,並且每隔幾分鐘就會執行一次。所以,它一定更快。在這個過程中有一個包含超過1000條記錄的列表。記錄是字符串格式。我想用給定部分的字符串過濾記錄。所有匹配的記錄應該被過濾並存儲在另一個列表中。如何使用通配符篩選列表中的項目?

例如:我在列表中有一些記錄。

Table1_Field1 
Table1_Field2 
Table1_Field3 
Table2_Field4 
Table2_Field4 
Table2_Field4 

如果我想要得到所有包含字符串部分「Table1」的記錄,那麼結果應該看起來像這樣。

Table1_Field1 
Table1_Field2 
Table1_Field3 

我知道這可以通過使用LINQ來完成。但是,我正在使用Visual Studio 2005 .Net Framework 2.0。另外我可以通過DataTable.Select()來做到這一點,但這很耗時。任何耗費時間超過50毫秒的方法都會導致我的應用程序出現問題。所以,它必須更快。我無法使用帶有通配符'*'的簡單循環過濾記錄。

請建議我如何在最短時間內做到這一點。

+0

什麼樣的名單呢?一個'列表'的東西?你想過濾數據源? 1000條字符串記錄應該在50ms內易於過濾。至於無法循環執行,無論選擇什麼方法,它都會循環。 LINQ是一個快捷方式,但你仍然會最終迭代/枚舉每條記錄。如果你在談論然後顯示過濾的記錄,或許這是耗時的。無論如何,我認爲我們需要更多信息。 –

+0

@EliGassert我很困惑,使用列表對象。我應該使用字符串數組還是使用列表或任何其他集合對象。我的問題是哪種方法最適合在最短時間內獲得過濾記錄。數據的類型是一個字符串列表。 – Shell

+0

我可以在數組中使用BinarySearch嗎? – Shell

回答

2

比方說,我們有一個列表,你只需要記錄包含字符串部分「Table1」的記錄。

下面的代碼將返回一個列表的結果:

List<string> myList = new List<string>(); 

myList.Add("Table1_Field1"); 
myList.Add("Table1_Field2"); 
myList.Add("Table1_Field3"); 
myList.Add("Table2_Field4"); 
myList.Add("Table2_Field4"); 
myList.Add("Table2_Field4"); 

List<string> resultList = myList.FindAll(MyFunc); 


private static bool MyFunc(string s) 
{ 

    // AndAlso prevents evaluation of the second Boolean 
    // expression if the string is so short that an error 
    // would occur. 
    if (s.Contains("Table1")) { 
     return true; 
    } else { 
     return false; 
    } 
} 
+0

正是我想要的。謝謝 – Shell

相關問題