查找与数组进行比较的字符串
本文关键字:比较 字符串 数组 查找 | 更新日期: 2023-09-27 18:35:24
这个解决方案给了我预期的结果。我正在尝试查看字符串是否存在字符串!但我想以一种不错的方式使用它,linq 或更少的代码。
string stringToCheck = "testtest";
string[] stringArray = { "text1", "testtest", "test1test2", "test2text1" };
foreach (string x in stringArray)
{
if (x.Contains(stringToCheck))
{
// System.Console.Write("{0} ", x.Contains(stringArray[0]));
string result = "No Found";
switch (stringToCheck)
{
case "text1":
if (x.Contains(stringArray[0]))
result = "text1";
break;
case "testtest":
if (x.Contains(stringArray[1]))
result = "testtest";
break;
}
System.Console.Write("{0} ", result);
Console.ReadLine();
}
}
编辑:代码没有达到我的期望,如果我更改string stringToCheck = "testtest longer string";
我希望它返回测试测试 使用此代码,不会返回任何内容
最简单的方法是在对搜索字符串执行Split
操作后,使用 Intersect
扩展方法:
var q = stringToCheck.Split(' ').Intersect(stringArray);
进一步对 linq 查询应用FirstOrDefault
会得到"要检查的字符串"序列中匹配的第一个字符串,如果未找到任何内容,则为 null。
string sFound = q.FirstOrDefault();
示例中的代码没有按照您所说的方式执行...
你说你想要这个:"我正在尝试查看字符串,如果我的数组的值存在"
查看数组以检查它是否包含某个值,可以使用 Contains
方法完成:
Console.WriteLine(stringArray.Contains(stringToCheck) ? stringToCheck : "No found");
包含返回 true 或 false。
它指示 IEnumerable 集合是否具有与参数匹配的元素。当包含 System.Linq
命名空间时,它会作用于任何IEnumerable
集合。
string stringToCheck = "testtest";
string[] stringArray = { "text1", "testtest", "test1test2", "test2text1" };
bool b = stringArray.Contains(stringToCheck);
注意:包含是一个extension method
,可以在数组、列表和某些其他集合上调用。
有几种方法可以做到这一点,人们已经回答了Contains()
您可以使用的另一种方法是Any()
:
stringArray.Any(m => m == stringToCheck)
您还可以使用Array.IndexOf()
:
Array.IndexOf(stringArray, stringToCheck)>-1 ? true : false
然而,在所有方法中,使用Array.IndexOf()
似乎是最快的。您可以在此处查看详细的比较。当您尝试在数百万大小的数组中搜索时,:
结果:
foreach loop search
: 391 ms
for loop search
: 412 ms
Contains() method search
: 185 ms
Any() method search
: 1011 ms
Via Index
: 141 ms