我有2个字符串列表,list A
和list B
。 list A
是包含路径的字符串列表,另一个包含文件夹的字符串。例子:
List<string> listA = new List<string>{ "c:\myPath\FolderA\blabla\", "c:\myPath\FolderB\blabla2\", "c:\myPath\FolderA\blabla3\" "c:\myPath\FolderC\blabla\"};
List<string> listB = new List<string> { "FolderA, FolderC"};
我想要一个比较2列表的方法。如果listA
包含listB
中的任何一个,则它有效,否则我不想要它。所以基于这个逻辑,我有:
List<string> listReturn = new List<string>{ "c:\myPath\FolderA\blabla\", "c:\myPath\FolderA\blabla3\" "c:\myPath\FolderC\blabla\"};
到目前为止,我所做的只是一种迭代第一个列表的方法,并使用Linq Contain
调用对字符串进行Any
调用,如下所示:
private static List<string> FilterList(List<string> listA, List<string> listB)
{
List<string> listReturn = new List<string>();
foreach (string val in listA)
{
if (listB.Any(item => val.Contains(item)))
{
listReturn.Add(val);
}
}
return listReturn;
}
它还不错,但如果有可用的Intersect方法,我想使用Linq方法或.NET方法。谢谢。
答案 0 :(得分:2)
对Where()
使用listA
过滤此列表中的项目,Exists()
使用listB
过滤条件:
List<string> listA = new List<string> {@"c:\myPath\FolderA\blabla\", @"c:\myPath\FolderA\blabla2\", @"c:\myPath\Folder\blabla3\", @"c:\myPath\FolderC\blabla\"};
List<string> listB = new List<string> { "FolderA", "FolderC" };
var intersect = listA.Where(a => listB.Exists(b => a.Contains(b)));
答案 1 :(得分:1)
试试这个
var result = listA.Where(i => listB.Any(y => i.Contains(y)).ToList();