字符串在数组中吗?

string[]中查看是否包含元素的最佳方法是什么。这是我第一次尝试。但也许有些东西我忽略了。数组大小将不超过200个元素。

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

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

using System.Linq;


//...


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

You can also use LINQ to iterate over the array. or you can use the Find method which takes a delegate to search for it. However I think the find method is a bit more expensive then just looping through.

数组排序了吗?如果是这样,你可以做一个 二进制搜索。这里是 还有.NET 实现。如果数组被排序,那么二进制搜索将提高任何迭代解决方案的性能。

你只是想要数组。存在函数(如果使用。NET 3.5,稍微方便一些)。

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));

这比手动遍历数组要快:

static bool isStringInArray(string[] strArray, string key)
{


if (strArray.Contains(key))
return true;
return false;
}

通常,如果您想询问某个特定对象是否在集合中,那么数组是一种糟糕的数据结构。

如果您将经常运行这种搜索,那么使用 Dictionary<string, something>而不是数组可能是值得的。Dictionary 中的查找是 O (1)(常量时间) ,而在数组中的搜索是 O (N)(花费的时间与数组的长度成正比)。

即使数组最多只有200个条目,如果您进行大量这样的搜索,Dictionary 可能会更快。

正如在上面的线程中多次提到的,它依赖于正在使用的框架。 .NetFramework3及以上版本具有。包含数组的()或 Exists ()方法。对于下面的其他框架,可以执行以下技巧,而不是循环遍历数组..。

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

不太确定效率..。 戴夫

我知道这很老套,但是我希望新的读者知道,有一种新的方法可以使用泛型和扩展方法来实现这一点。

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

通过将此扩展方法添加到代码中:

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

你可以这样搜索:

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

它适用于任何类型(只要你创建一个好的 equals 方法)。

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

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
);

当断言返回 true 时 catInside 也会返回 true。