c# – 如何将字符串与linq中的“过滤器”列表进行比较?

前端之家收集整理的这篇文章主要介绍了c# – 如何将字符串与linq中的“过滤器”列表进行比较?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试通过“过滤器”列表过滤字符串集合…一系列不良单词.该字符串包含我不想要的列表中的单词.

我到目前为止,这里的坏词是“frakk”:

string[] filter = { "bad","words","frakk" };

string[] foo = 
{ 
    "this is a lol string that is allowed","this is another lol frakk string that is not allowed!"
};

var items = from item in foo 
            where (item.IndexOf( (from f in filter select f).ToString() ) == 0)
            select item;

但这不起作用,为什么呢?

解决方法

您可以使用任何包含:
var items = foo.Where(s => !filter.Any(w => s.Contains(w)));

如果你想比较不区分大小写:

var items = foo.Where(s => !filter.Any(w => s.IndexOf(w,StringComparison.OrdinalIgnoreCase) >= 0));

更新:如果要排除过滤列表中至少有一个单词的句子,可以使用String.Split()和Enumerable.Intersect:

var items = foo.Where(sentence => !sentence.Split().Intersect(filter).Any());

Enumerable.Intersect非常高效,因为它在引擎盖下使用了一套.将长序列放在首位更有效.由于Linq的延迟执行是在第一个匹配的单词上停止.

(请注意,“空”拆分包括其他空白字符,如制表符或换行符)

猜你在找的C#相关文章