[英]How to check Array of strings contains a particular string?
我正在使用.NET 2.0我有一個很大的字符串數組。 我想檢查數組中是否存在特定的字符串,我不確定,是否優化了以下代碼或者我需要對其進行更優化。 請指導。
string []test_arr= new string[]{"key1","key2","key3"};
Boolean testCondition = (new List<string>(test_arr)).Contains("key3");
我也想了解更多
是否有任何好的參考或書籍,有人已經參考,然后幫助我!
string []test_arr= new string[]{"key1","key2","key3"};
bool testCondition = Array.Exists
(
test_arr,
delegate(string s) { return s == "key3";}
);
如果可能,您可以對數組進行排序(使用靜態Array.Sort方法),然后使用Array.BinarySearch
或者,您需要為字符串使用更優化的數據結構。
在.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");
列表是O(n),SortedList是O(log n)
在您的示例中,最大的開銷可能是創建List,但這可能是演示的一部分。
從數組開始,以下內容可能會更快:
int x = Array.IndexOf<string>(test_arr, "key3");
bool testCondition = x >= 0;
但是如果你有選擇權,那么使用HashSet<string>
來存儲它們會更有效率。 HashSet可以檢查O(1)中是否存在元素。
關於你的其他問題,他們已被問過SO,請使用搜索選項,例如“C#books”
abouot你的larga數組字符串:只要你使用一個數組就沒有優化的方法(你必須從第一個元素開始並經過每個元素直到你找到它 - 或者如果你不通過整個數組) - 這給出了你最糟糕的情況是O(n)(O表示法給出了一個程序需要完成某些事情的時間)。
由於您希望針對搜索進行優化,我建議您使用哈希表或樹(取決於數據集的大小)。 這將大大減少您需要檢查的時間
我的回答與Matt Howells非常相似。 但我建議使用StringComparison
Array.Exists<string>(stringsArray,
delegate(string match)
{
return match.Equals("key", StringComparison.InvariantCultureIgnoreCase)
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.