如何检查字符串数组包含特定的字符串?

时间:2009-08-05 09:04:59

标签: c# arrays generics collections attributes

我正在使用.NET 2.0 我有一大堆字符串。 我想检查数组中是否存在特定的字符串, 我不确定,是否优化了以下代码或者我需要对其进行更优化。 请指导。

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

我也想了解更多关于

的信息
  1. .NET Generics
  2. .NET Attributes
  3. .NET思考
  4. 是否有任何好的参考或书籍,有人已经提及然后帮助我!

7 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:2)

如果可能,您可以对数组进行排序(使用静态Array.Sort方法),然后使用Array.BinarySearch

或者,您需要为字符串使用更优化的数据结构。

答案 2 :(得分: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");

答案 3 :(得分:1)

列表是O(n),SortedList是O(log n)

答案 4 :(得分:1)

在你的样本中,最大的开销可能是创建List,但这可能是演示的一部分。

从数组开始,以下内容可能会更快:

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

但是如果你有选择权,那么首先使用HashSet<string>存储它们会更有效率。 HashSet可以检查O(1)中是否存在元素。

关于您的其他问题,他们已经被问过SO,请使用搜索选项,例如“C#books”

答案 5 :(得分:1)

abouot你的larga数组字符串: 只要你使用一个数组就没有优化的方法(你必须从第一个元素开始并经历每个元素直到你找到它 - 或者如果你没有通过整个数组) - 这给你一个最坏的情况时间为O (n)(O符号表示程序需要完成某些事情的时间)。

由于您希望针对搜索进行优化,我建议您使用哈希表或树(取决于数据集的大小)。这将大大减少您需要检查的时间

答案 6 :(得分:1)

我的回答与Matt Howells非常相似。 但我建议使用StringComparison


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