簡體   English   中英

C# 檢查是否列表<t>包含任何其他列表並返回匹配項

[英]C# Check if list<t> contains any of another list and return the matching item

我有一個字符串列表,我需要在另一個字符串列表中查找/驗證並返回找到的字符串。

List<string> strList1 = new List<string>() { "oranges", "apples", "grapes" };
List<string> strList2 = new List<string>() {
   "Joe likes peaches",
   "Mack likes apples",
   "Hank likes raisins",
   "Jodi likes grapes",
   "Susan likes apples"  
};

好的,所以這是一個不好的例子,但基本上,我希望能夠創建一個 Linq 調用,以在strList1的一個或多個元素中查找strList2中的任何值並返回找到的值。

所以結果將是在````strList2```中找到的strList1項的列表。 就像是:

List<string> found = { "apples", "grapes" };

我的搜索沒有任何結果,因為我可能沒有正確搜索。 任何幫助將不勝感激。 謝謝!

我不能保證性能,但這可以使用WhereAny來完成。

strList1.Where(str => strList2.Any(str2.Contains(str)))

或者對於復雜的對象:

objList1.Where(obj => objList2.Any(obj2.property.Contains(obj.property)))

我想這會回答你的問題

strList1.Where(c => strList2.Any(a => a.Contains(c))).ToList();

有很多方法可以做到。 如果您首先將“句子”拆分為“單詞”,那么執行 linq 您可能會受益於Intersect

List<string> strList1 = new List<string>() { "oranges", "apples", "grapes" };
List<string> strList2 = new List<string>() {
   "Joe likes peaches",
   "Mack likes apples",
   "Hank likes raisins",
   "Jodi likes grapes",
   "Susan likes apples"  
};

List<string> found = strList1.Intersect(strList2.SelectMany(s => s.Split(" "))).ToList(); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM