2009-08-05 207 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) 
       }); 
相关问题