我有一个字符串列表,我需要在列表中找到我的搜索字符串的最长匹配。
例如,该列表包含:" 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);
答案 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
}