簡體   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