【发布时间】:2017-01-23 15:54:48
【问题描述】:
我有几个列表,字数在2000-3000字左右:
var list1 = new List<string> {"able", "adorable", "adventurous", ...};
如果字符串inputStr = "do, dream"; 包含列表中的任何值,我想用if (list1.Any(word.Contains)) 在string[] words = inputStr.Split(' '); foreach (string word in words) 中查找字符串中的每个单词。
我不确定,可能是因为我使用了列表,或者我的搜索Contains方法对于这种情况不正确,但结果我发现了单词,它不等于输入字符串中存在的单词,但是其中包含此单词作为单词的一部分,例如单词“do”或单词“dream”:
(do) adorable, doubt, fully, do, doh, freedom, down, double
(dream) dreamily, dream
不确定如何避免这种情况,如果问题是列表,最好使用Dictionary 或SortedDictionary。如果我以这种方式检查,我会得到相同的结果var val1 = list1.FirstOrDefault(stringToCheck => stringToCheck.Contains(word)); 似乎不同的搜索给了我与列表相同的结果,所有单词都包含在输入字符串中找到的单词作为单词的一部分,但期望的结果是只找到相等的单词:
(do) do
(dream) dream
【问题讨论】:
-
好像你想做
list1.Contains(word)。 -
你的最终目标是什么?您想在
list1中的文本中查找单词? -
听起来你可以通过将输入设为列表然后获取
list1.Intersect(list2) -
@juharr 你好,如果我写(list1.Contains(word))而不是(list1.Any(word.Contains)),我已经回答了下面的结果,不确定原因
-
@Sergey Berezovskiy 你好,没错。我认为 tonythewest 的答案对我的特殊情况很有用