如何从字符串列表中搜索字符串

Dee*_*Raj -1 .net linq c#-4.0

我有以下字符串列表

List A = {"1","2","3"}

List B = {
"1,2,3,4,5,6,7",
"1,2,6,7",
"1",
"4,5,6",
"6,7"
}
Run Code Online (Sandbox Code Playgroud)

我希望列表B中的所有项目与列表A完全匹配或部分匹配

那是我想输出的

Result = {
"1,2,3,4,5,6,7",
"1,2,6,7",
"1"
}
Run Code Online (Sandbox Code Playgroud)

如何用Linq做到这一点?

Jon*_*Jon 5

您必须将每个以逗号分隔的字符串转换为集合,并查看该集合是否包含与列表相同的任何项目A.LINQ很容易做到这一点:

var matches = B.Where(s => s.Split(',').Intersect(A).Any()).ToList();
Run Code Online (Sandbox Code Playgroud)

用英语讲:

找到那些字符串B(在拆分后)至少有一个共同的项目A,并列出结果列表.

看到它在行动.

请注意,如果在项目总数AB放在一起是巨大此方法不会是非常有效的.您可以通过改善前处理的情况AHashSet<string>,并重写过滤器

var set = new HashSet<string>(A);
var matches = B.Where(s => s.Split(',').Any(n => set.Contains(n))).ToList();
Run Code Online (Sandbox Code Playgroud)

此版本产生相同的结果,并且对于大输入将更快.