数组中的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。