2009-08-05 262 views
2

我正在使用.NET 2.0 我有一大串字符串。 我想檢查一個特定的字符串是否存在於數組中, 我不確定,下面的代碼是否經過優化或者我需要使其更優化。請指導 。如何檢查字符串數組是否包含特定的字符串?

string []test_arr= new string[]{"key1","key2","key3"}; 
Boolean testCondition = (new List<string>(test_arr)).Contains("key3"); 

我也想知道更多關於

  1. .NET泛型
  2. .NET屬性
  3. .NET思考

有沒有什麼好的引用或書,那有人已經提及,然後幫助我!

回答

8
string []test_arr= new string[]{"key1","key2","key3"}; 
bool testCondition = Array.Exists 
(
    test_arr, 
    delegate(string s) { return s == "key3";} 
); 
+5

+1,但你的身體的代表應該是`返回小號==「KEY3」;` – LukeH 2009-08-05 09:27:23

2

,如果可能,你可以整理你的陣列(使用靜態Array.Sort方法),然後使用Array.BinarySearch

或者你需要使用一個更優化的數據結構的字符串。

1

在.NET Framework 2.0版中,Array類實現了System.Collections.Generic.IList,System.Collections.Generic.ICollection和System.Collections.Generic.IEnumerable通用接口。

因此,你可以做到以下幾點:

string[] test_arr = new string[]{"key1","key2","key3"}; 
Boolean testCondition = ((IList<string>)test_arr).Contains("key3"); 
1

列表爲O(n),排序列表是O(log n)的

1

在你的樣品中最大的開銷可能會是列表的創建,但這可能是示範的一部分。

從陣列開始,以下可能會更快:

int x = Array.IndexOf<string>(test_arr, "key3"); 
bool testCondition = x >= 0; 

但是,如果你有選擇,這將是更有效地使用一個HashSet<string>將它們存儲在首位。 HashSet可以檢查O(1)中元素的存在。

關於你提到的其他問題,他們已經被問過這樣,使用搜索選項,例如用「C#書」

1

abouot字符串您拉爾加陣列: 沒有因爲很長的路要走優化爲你使用一個數組(你必須從第一個元素開始,遍歷每個元素,直到找到它 - 或者如果不需要通過整個數組) - 這會給你一個最壞情況時間O(n)(O表示給出時間一個程序需要完成一些事情)。

既然你想優化搜索,我建議你使用哈希表或樹來代替(取決於你的數據集有多大)。這將大大減少您需要檢查的時間

1

我的答案與Matt Howells非常相似。 但我建議使用StringComparison


Array.Exists<string>(stringsArray, 
       delegate(string match) 
       { 
        return match.Equals("key", StringComparison.InvariantCultureIgnoreCase) 
       }); 
相關問題