C# 如何检查字符串数组是否包含特定字符串?

C# 如何检查字符串数组是否包含特定字符串?,c#,arrays,generics,collections,attributes,C#,Arrays,Generics,Collections,Attributes,我正在使用.NET2.0 我有一个很大的字符串数组。 我想检查数组中是否存在特定字符串, 我不确定下面的代码是经过优化还是需要进一步优化。 请导游 string []test_arr= new string[]{"key1","key2","key3"}; Boolean testCondition = (new List<string>(test_arr)).Contains("key3"); string[]test\u arr=新字符串[]{“key1”、“key2”、“ke

我正在使用.NET2.0 我有一个很大的字符串数组。 我想检查数组中是否存在特定字符串, 我不确定下面的代码是经过优化还是需要进一步优化。 请导游

string []test_arr= new string[]{"key1","key2","key3"};
Boolean testCondition = (new List<string>(test_arr)).Contains("key3");
string[]test\u arr=新字符串[]{“key1”、“key2”、“key3”};
布尔testCondition=(新列表(test_arr))。包含(“key3”);
我还想知道更多关于

  • .NET泛型
  • .NET属性
  • .NET反射

  • 有没有什么好的参考书或书,有人已经参考过了,那就帮帮我吧

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

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

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

    在.NET Framework 2.0版中,数组类实现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");
    
    string[]test\u arr=新字符串[]{“key1”、“key2”、“key3”};
    布尔testCondition=((IList)test_arr).Contains(“key3”);
    
    列表是O(n),SortedList是O(log n)

    在您的示例中,最大的开销可能是创建列表,但这可能是演示的一部分

    从阵列开始,以下操作可能会更快:

    int x = Array.IndexOf<string>(test_arr, "key3");
    bool testCondition = x >= 0;
    
    intx=Array.IndexOf(test_arr,“key3”);
    bool testCondition=x>=0;
    
    但是如果您有这个选项,那么首先使用
    HashSet
    存储它们会更有效。HashSet可以检查O(1)中是否存在元素


    关于你的其他问题,他们已经被问过了,因此,使用搜索选项,例如“C#books”

    关于你的larga字符串数组: 只要你使用一个数组,就没有优化的方法(你必须从第一个元素开始,遍历每一个元素,直到你找到它——或者如果你没有找到,遍历整个数组)——这会给你一个最坏情况下的时间O(n)(O表示法给出一个程序完成某件事情所需要的时间)


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

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

    
    Array.Exists(stringsArray,
    委托(字符串匹配)
    {
    返回match.Equals(“key”,StringComparison.InvariantCultureIgnoreCase)
    });
    
    谢谢卢克,他是凭记忆写的。我已经更正了代码。您可能混合了Lamda和委托符号;)。
    
    Array.Exists<string>(stringsArray,
                    delegate(string match)
                    {
                        return match.Equals("key", StringComparison.InvariantCultureIgnoreCase)
                    });