查找与数组进行比较的字符串

本文关键字:比较 字符串 数组 查找 | 更新日期: 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