我有以下字符串列表
List A = {"1","2","3"}
List B = {
"1,2,3,4,5,6,7",
"1,2,6,7",
"1",
"4,5,6",
"6,7"
}
我希望列表B中的所有项目与列表A完全或部分匹配
那就是我要输出
Result = {
"1,2,3,4,5,6,7",
"1,2,6,7",
"1"
}
如何使用Linq执行此操作?
答案 0 :(得分:5)
您必须将每个以逗号分隔的字符串转换为集合,并查看该集合是否包含与您的列表A
相同的任何项目。这很容易用LINQ:
var matches = B.Where(s => s.Split(',').Intersect(A).Any()).ToList();
英文:
在
B
中查找(分割后)至少有一个字符串 与A
共同的项目,并列出结果列表。
<强> See it in action 强>
请注意,如果A
和B
中的项目总数相当大,则此方法效率不高。您可以通过将A
预处理到HashSet<string>
并将过滤器重写为
var set = new HashSet<string>(A);
var matches = B.Where(s => s.Split(',').Any(n => set.Contains(n))).ToList();
这个版本produces the same results对于大型输入来说会更快。
答案 1 :(得分:1)
你想要的是这样的
string[] A = { "1", "2", "3" };
string[] B = { "1,2,3,4,5,6,7", "1,2,6,7", "1", "4,5,6", "6,7"};
var Result = from string S in B
where A.Any(i => S.Contains(i))
select S;
答案 2 :(得分:-1)
您可以使用Contains方法,
var Result = new List();
A.ForEach(a =&gt; {Result.AddRange(B.Where(b =&gt; b.Contains(a)));});