2013-07-21 62 views
1

我有結構就是這樣,當提供String有效的方法來搜索字符串數組列表在C#

String[] variable1= new String["ABC", "FSS" , "FSFS", "GDGDDS"]; 
String[] variable2= new String["SA", "GS" , "QE", "HF"]; 


static List<String[]> allList = new List<String[]>();; 

allList .Add(variable1); 
allList .Add(variable2); 

我要搜索allList,並提供瞭如果它發現了數組的結果。

任何幫助以有效的方式歸檔這一點?

+1

如果在什麼多個陣列中存在串? –

+0

它不會,它將是獨一無二的..作爲我的要求! – Sudantha

+2

我會考慮使用Dictionary/Hashtable方法來重構它。我將分類潛在的密鑰並將每個數組存儲在一個字典條目中。建議的結構不適合高效訪問,因爲您必須通過所有列表/數組進行線性搜索 – TGH

回答

5

提供的兩種解決方案都以線性時間運行,如果您有大量詞語並做大量查詢,速度會太慢。

您可以使用字典。一本Dictionary在內部使用了一個哈希表,它將會快得多。

把所有的字符串在字典中,你可以這樣做:

Dictionary<String, String[]> dict = new Dictionary<String, String[]>(); 
foreach(String[] arr in allList) 
    foreach(String str in arr) 
     dict[str] = arr; 

然後你就可以輕鬆地搜索一下:

String s = "ABC"; 
if(dict.ContainsKey(s)) 
    // result is dict[s] 
else 
    // String is not in any array 

希望它能幫助!

+1

還記得,默認情況下,loook-ups會區分大小寫,但你可以傳入[StringComparer.OrdinalIgnoreCase](http://msdn.microsoft.com/ en-us/library/system.stringcomparer.ordinalignorecase.aspx)添加到字典的構造函數中,它將匹配'abc'和'ABC'。 –

0

你也可以試試這個

var output=allList.Where(x=>(string.Join(",", x)+",").IndexOf(input+",")!=-1) 
        .FirstOrDefault(); 
相關問題