我正在使用.NET 2.0 我有一大堆字符串。 我想检查数组中是否存在特定的字符串, 我不确定,是否优化了以下代码或者我需要对其进行更优化。 请指导。
string []test_arr= new string[]{"key1","key2","key3"};
Boolean testCondition = (new List<string>(test_arr)).Contains("key3");
我也想了解更多关于
的信息是否有任何好的参考或书籍,有人已经提及然后帮助我!
答案 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)
});