查找字符串与数组比较

时间:2014-12-28 15:13:52

标签: c# linq

这个解决方案给了我预期的结果。如果stringToCheck的值存在,我正在尝试查看字符串!但我想以一种不错的方式,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";我希望它返回 testtest 使用此代码,不会返回任何内容

4 个答案:

答案 0 :(得分:1)

您的示例中的代码不会按照您的说法执行操作...
你说你想要这个:“如果我的数组的值存在,我正试图查看字符串”

查看数组以检查它是否包含某个值,可以使用Contains方法完成:

Console.WriteLine(stringArray.Contains(stringToCheck) ? stringToCheck : "No found");

答案 1 :(得分:1)

最简单的方法是在对搜索字符串执行Intersect操作后使用Split扩展方法:

var q = stringToCheck.Split(' ').Intersect(stringArray);

在你的linq查询中进一步应用FirstOrDefault可以获得第一个在'字符串中匹配'序列匹配的字符串,如果没有找到,则返回null。

string sFound = q.FirstOrDefault();

答案 2 :(得分:0)

包含会返回true或false 它指示IEnumerable集合是否具有与参数匹配的元素。当包含IEnumerable命名空间时,它会对任何System.Linq集合起作用。

string stringToCheck = "testtest";
string[] stringArray = { "text1", "testtest", "test1test2", "test2text1" };
bool b = stringArray.Contains(stringToCheck);

注意: 包含是extension method,可以在数组,列表和某些其他集合上调用。

答案 3 :(得分:0)

有几种方法可以做到这一点,人们已经回答了Contains()另一种可以使用的方法Any()

stringArray.Any(m => m == stringToCheck)

您还可以使用Array.IndexOf()

Array.IndexOf(stringArray, stringToCheck)>-1 ? true : false

然而,在所有方法中,使用Array.IndexOf()似乎是最快的。您可以看到详细的比较here。当您尝试搜索数百万大小的数组时:

<强>结果:

foreach loop search:391 ms

for loop search:412毫秒

Contains() method search:185 ms

Any() method search:1011 ms

Via Index:141 ms