繁体   English   中英

如何检查列表是否包含另一个列表的所有字符串

[英]How to check if list contains all string of another list

我有一个对象列表。 该对象包含一个字符串List。 像那样:

public class ObjectA
{
    ...
    IList<string> StringList;
}

我有一个要在StringList上搜索的单词列表。 我需要搜索一个ObjectA列表,并找到具有所有单词(所有单词的一部分)的所有ObjectA。

所以我做到了:

 List<ObjectA> myObjectList;
 List<string> wordsToFind;  

 var result = myObjectList.Where(objectA => wordsToFind.All(objectA.StringList.Contains));

问题是我的结果是只得到整个单词(等于)。 我想得到包含我的wordsToFind部分内容的结果。

wordsToFind = {"tes","don"};
StringListElement = {"test", "done"}

应该返回我的选择。

我怎样才能做到这一点?

IndexOf可能是您想要的地方,或其重载之一

报告此实例中首次出现指定的Unicode字符或字符串的从零开始的索引。 如果在此实例中找不到字符或字符串,则该方法返回-1。

List<ObjectA> myObjectList;
List<string> wordsToFind;  

var result = myObjectList.Where(x => x.StringList.All(y => wordsToFind.Any(z => y.IndexOf(z) >= 0)));

另请注意,此操作的时间复杂度非常糟糕


更新资料

完整演示在这里

另请注意,如果要不区分大小写使用

y.IndexOf(z, StringComparison.InvariantCultureIgnoreCase) 

或以下之一

  • CurrentCulture使用对区域性敏感的排序规则和当前区域性来比较字符串。

  • CurrentCultureIgnoreCase使用对区域性敏感的排序规则,当前区域性来比较字符串,而忽略要比较的字符串的大小写。

  • InvariantCulture使用区分文化的排序规则和不变区域性比较字符串。

  • InvariantCultureIgnoreCase使用对区域性敏感的排序规则,不变区域性来比较字符串,并忽略要比较的字符串的大小写。

  • Ordinal使用序数(二进制)排序规则比较字符串。

  • OrdinalIgnoreCase使用序数(二进制)排序规则比较字符串,而忽略要比较的字符串的大小写。

我认为这应该为您工作

var wordsToFind = new List<string>{ "tes","don"};
var data= new List<ObjectA>()
{
    new ObjectA()
    {
        StringList = new List<string>{"test", "done", "blah"}
    },
    new ObjectA()
    {
        StringList = new List<string>{"test2", "done2", "blah2"}
    }
};

var result = (from item in data.Select(x => x.StringList)
              from bar in item
              from word in wordsToFind
              where bar.Contains(word)
              select bar)
              .ToList();

结果应该给你

"test", "done","test2", "done2"

做到这一点的方法是结合使用AnyAll

您需要检查的所有元素wordsToFind被串在任何元素StringList

bool result = wordsToFind.All(word => currentObject.StringList.Any(str => str.Contains(word));

这是对象列表中的一个对象。 您可以再次将All应用于该列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM