Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将字符串与“a”进行比较;“过滤器”;linq中的列表?_C#_Linq - Fatal编程技术网

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

C# 如何将字符串与“a”进行比较;“过滤器”;linq中的列表?,c#,linq,C#,Linq,我正在尝试通过“筛选器”列表筛选字符串集合。。。一连串的坏话。字符串包含列表中的一个单词“我不想要它” 到目前为止,这里的坏词是“该死的”: 但是这不起作用,为什么?你可以使用任何+包含的: var items = foo.Where(s => !filter.Any(w => s.Contains(w))); 如果要不敏感地比较大小写: var items = foo.Where(s => !filter.Any(w => s.IndexOf(w, StringCom

我正在尝试通过“筛选器”列表筛选字符串集合。。。一连串的坏话。字符串包含列表中的一个单词“我不想要它”

到目前为止,这里的坏词是“该死的”:


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

你可以使用
任何
+
包含的

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());
非常有效,因为它在发动机罩下使用了一套
。将长序列放在第一位更有效。由于Linq的延迟执行,在第一个匹配字上停止


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

您需要解决的第一个问题是将句子拆分为一系列单词。最简单的方法是基于空间

string[] words = sentence.Split(new char[] {' '}, StringSplitOptions.RemoveEmptyEntries);
从那里,您可以使用一个简单的LINQ表达式来查找亵渎

var badWords = words.Where(x => filter.Contains(x));
然而,这是一个有点原始的解决方案。它不会处理许多您可能需要考虑的复杂情况

  • 有许多字符可以用作空格。我的解决方案仅使用
    '
  • 拆分不处理标点符号。所以
    不会被视为
    。也许最好把法律人物的字眼分开

您最初尝试失败的原因是:

(from f in filter select f).ToString()
计算为linq表达式部分隐含的数组迭代器类型名称的字符串。所以您实际上是在比较以下字符串的字符:

System.Linq.Enumerable+whereselectArrayInterator``2[System.String,System.String]


而不是在检查短语时过滤词。

将坏词列表连接起来并将其作为正则表达式匹配放在这里比试图担心所有各种单词分割排列更合理吗?@JimWooley这可能是解决问题的更好方法。Esp假设
Regex
已经有了用于单词边界检测的内置机制(
\b
)。在我推荐一个正则表达式之前,我仍然想知道更多关于这个场景的信息,但是我把它们保留在非关键场景中(对于快速javascript验证来说很好,但是对于服务器上的任何东西都不好),为什么服务器端正则表达式不好?(真正的问题)@MarkWalsh即使对于经常使用它们的人来说,它们也太容易搞砸了。案件太多了,很难证明你一切都对。例如,大多数正则表达式不考虑unicode字符串,很容易被它们破坏。好吧,我明白你的意思,尤其是关于编码。在双方都有一些令人讨厌的结果,遗憾的是,这些结果往往是不可避免的。这个解决方案不会抓住一些偏颇的话吗?例如,它会将“badmitten”标记为坏消息word@JaredPar:编辑我的答案以包含单词approach。
(from f in filter select f).ToString()