如何将列表中的字符串与句子中的单词匹配?

时间:2014-03-20 10:00:00

标签: c#

我有两个名单和一个句子。我需要找出任何列表中的哪个字符串与句子中的单词匹配。到目前为止,我已经能够通过将句子分成单词数组然后循环遍历每个列表并将元素与数组元素进行比较来实现此目的。我的代码非常笨拙。有更有效/更好的方式吗?这是if语句中没有嵌套循环的代码。

List<string> browserList = new List<string>(new string[] { "Firefox", "Chrome", "Safari"});
List<string> mediaPlayerList = new List<string>(new string[] { "VLC", "WinAmp", "WMP" });

string sentence = "I use Firefox everyday";

if (browserList.Any(sentence.Contains))
{
   // return the matching string (browser's name)
}

else if (mediaPlayerList.Any(sentence.Contains))
{
   // return the matching string (media player's name)
}

2 个答案:

答案 0 :(得分:6)

返回IEnumerable<string>

IEnumerable<string> ienBrowser = browserList.Where(x => sentence.Contains(x));

IEnumerable<string> ienmediaPlayer = mediaPlayerList.Where(x => sentence.Contains(x));

返回您需要的值:

if (ienBrowser.Count() > 0)
{
   return ienBrowser.ToList();  // Take the first element or entire list if you like
}

else if (ienmediaPlayer.Count() > 0) 
{
   return ienmediaPlayer.ToList();  // Take the first element or entire list if you like
}

enter image description here

但是,如果句子中包含浏览器以及媒体播放器名称,则if - else if格式将无效。

答案 1 :(得分:2)

严格来说,这与您当前的算法完全相同(尊重匹配顺序并返回单个值):

var match = browserList.Where(sentence.Contains).FirstOrDefault() ??
            mediaPlayerList.Where(sentence.Contains).FirstOrDefault();