字符串是否在数组中?

Bra*_*rad 98 c# arrays string

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;
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*kle 194

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

using System.Linq;

//...

string[] array = { "foo", "bar" };
if (array.Contains("foo")) {
    //...
}
Run Code Online (Sandbox Code Playgroud)

  • 您必须包含System.Linq才能使用此功能. (54认同)
  • 作为一个单行:`(new string [] {"foo","bar"}).包含("foo")` (7认同)
  • 甚至更短:`new [] {"foo","bar"} .Contains(foo)` (6认同)
  • @Brad:那是因为它的扩展方法来自Enumerable. (4认同)

Gab*_*ams 24

我知道这已经过时了,但我希望新读者知道有一种新的方法可以使用泛型和扩展方法来实现这一点.

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

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

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

你可以像这样执行搜索:

string myStr = "str3"; 
bool found = myStr.IsIn("str1", "str2", "str3", "str4");
Run Code Online (Sandbox Code Playgroud)

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


Nol*_*rin 12

您只需使用Array.Exists函数(如果您使用的是.NET 3.5,则包含扩展方法,这稍微更方便).

  • 下面是.NET 2.0的一个工作示例:if(Array.Exists(arrayToLookThrough,o => o == elementToSearchFor)) (3认同)

And*_*are 6

数组是否排序?如果是这样,你可以进行二分查找.这也是.NET实现. 如果对数组进行排序,那么二进制搜索将提高任何迭代解决方案的性能.


小智 6

Linq(s&g's):

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

或者,根据要求

var found = strArray.Any(
    x=>x.Equals(test, StringComparison.OrdinalIgnoreCase));
Run Code Online (Sandbox Code Playgroud)