找到列表c#中字符串的最长匹配

时间:2017-05-26 19:50:03

标签: c#

我有一个字符串列表,我需要在列表中找到我的搜索字符串的最长匹配。

例如,该列表包含:" test"," abc"," testing"," testingap"我的搜索字符串是' testingapplication'

结果应该是' testingap'

这是我到目前为止做的,它完成了工作,但我在寻找有更好的方法来做到这一点

string search= "testingapplication";
List<string> names = new List<string>(new[] { "test", "abc", "testing", "testingap" });
List<string> matchedItems = new List<string>();

foreach (string item in names)
{
        if (search.Contains(item))
        {
            matchedItems.Add(item);
            Console.WriteLine(item);
        } 
}

var WordMatch= matchedItems.Aggregate("", (max, cur) => max.Length > cur.Length ? max : cur);
Console.WriteLine("WordMatch"+WordMatch);

1 个答案:

答案 0 :(得分:9)

由于您已经在使用LINQ,因此您可以考虑订购您的名字&#34;通过OrderByDescending()方法获取长度并使用FirstOrDefault()获取包含字符串的第一个字段,如下所示:

var match = names.OrderByDescending(n => n.Length)
                 .FirstOrDefault(n => search.Contains(n));

if (match == null)
{
    // No match was found, handle accordingly.
}
else
{
    // match will contain your longest string
}