C# 如何检查字符串数组是否包含特定字符串?
我正在使用.NET2.0 我有一个很大的字符串数组。 我想检查数组中是否存在特定字符串, 我不确定下面的代码是经过优化还是需要进一步优化。 请导游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
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”);
我还想知道更多关于
有没有什么好的参考书或书,有人已经参考过了,那就帮帮我吧 如果可能,您可以对数组进行排序(使用静态方法),然后使用
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)
});