计算字符串中列表单词的匹配数

时间:2017-02-20 17:17:28

标签: c#

我有一个单词列表

var words = List<string> { "Apple", "Banana", "Cherry" };'

和一个字符串

var fruitString = "Apple Orange Banana Plum";

我知道我是否

var hasFruits = words.Contains(w => fruitString.Contains(w));

我可以判断该字符串是否包含任何这些单词。我需要做的是告诉这些词中有多少匹配。

我知道我可以做到

var count = 0;
foreach (var word in words)
{
    if (fruitString.Contains(word))
    {
        count++;
    }
}

但有没有办法在Linq单行中做到这一点?

2 个答案:

答案 0 :(得分:4)

是的,只需将Contains换成Count

var count = words.Count(w => fruitString.Contains(w));

请注意,这保留了与原始代码相同的结果 - 正如Sergey's answer中所指出的,这种方法可能很幼稚,具体取决于您尝试实现的目标。

答案 1 :(得分:4)

如果要检查出现在以空格分隔的字符串中的单词的 count ,可以使用集合的交集:

fruitString.Split().Intersect(words).Count() // 2

如果你想检查你的字符串中有哪些字样 - 只需删除Count调用:

fruitString.Split().Intersect(words) // "Apple", "Banana"

注意1:如果您执行String.Contains,则会在"Apple"字符串中找到"Applejack"

注意2:将StringComparer.InvariantCultureIgnoreCase作为第二个参数传递给Intersect方法调用将使忽略大小写字符串比较和&#34; apple&#34;将匹配&#34; Apple&#34;。

注意3:您可以使用Regex.Split从字符串中获取单词,而单词之间不仅有空格。例如。像"I look to the east and see: apple, orange and banana!"

这样的东西