数组中的string?

查看string[]以查看它是否包含元素的最佳方法是什么? 这是我的第一枪。 但也许有些东西是我忽略的。 数组大小不会超过200个元素。

 bool isStringInArray(string[] strArray, string key) { for (int i = 0; i <= strArray.Length - 1; i++) if (strArray[i].ToString() == key) return true; return false; } 

只需使用已经内置的Contains()方法即可:

 using System.Linq; //... string[] array = { "foo", "bar" }; if (array.Contains("foo")) { //... } 

我知道这是旧的,但我希望新的读者知道,有一种新的方法来做到这一点,使用generics和扩展方法。

你可以阅读我的博客文章 ,了解更多关于如何做到这一点的信息,但主要的想法是这样的:

通过在你的代码中添加这个扩展方法:

 public static bool IsIn<T>(this T source, params T[] values) { return values.Contains(source); } 

你可以像这样执行你的search:

 string myStr = "str3"; bool found = myStr.IsIn("str1", "str2", "str3", "str4"); 

它适用于任何types(只要你创build一个好的等价方法)。 任何值types的肯定。

你只需要在Array.Exists函数之后(或者如果你使用的是.NET 3.5,则使用Contains扩展方法,稍微方便一点)。

Linq(对于s&g's):

 var test = "This is the string I'm looking for"; var found = strArray.Any(x=>x == test); 

或者取决于要求

 var found = strArray.Any( x=>x.Equals(test, StringComparison.OrdinalIgnoreCase)); 

数组是sorting的吗? 如果是的话,你可以做一个二进制search 。 这也是.NET的实现。 如果数组被sorting,那么二分search将提高任何迭代解决scheme的性能。

一般来说,如果你想问一个特定的对象是否在集合中,数组是一个糟糕的数据结构。

如果你经常使用这个search,那么使用Dictionary<string, something>可能是值得的Dictionary<string, something>而不是一个数组。 在字典中的查找是O(1)(恒定时间),而在数组中search是O(N)(需要的时间与数组的长度成正比)。

即使数组最多也只有200个,如果你做了很多这样的search,字典可能会更快。

你也可以使用LINQ遍历数组。 或者您可以使用Find方法,它使委托来search它。 不过,我认为查找方法是一个稍微昂贵,然后循环。

这比手动迭代数组快得多:

 static bool isStringInArray(string[] strArray, string key) { if (strArray.Contains(key)) return true; return false; } 

正如在上面的线程中多次提到的,它依赖于使用的框架。 .Net Framework 3及以上版本具有数组的.Contains()或Exists()方法。 对于下面的其他框架,可以做下面的技巧,而不是通过数组循环…

 ((IList<string>)"Your String Array Here").Contains("Your Search String Here") 

效率不太确定… Dave

如果你不想或者根本就不能使用Linq,你也可以使用静态的Array.Exists(...); function:

https://msdn.microsoft.com/en-us/library/yw84x8be%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

 var arr = new string[]{"bird","foo","cat","dog"}; var catInside = Array.Exists( arr, // your Array (s)=>{ return s == "cat"; } // the Predicate ); 

当CatInside也是真实的时,Predicate返回true。