我有以下字符串列表
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 做到这一点?
您必须将每个逗号分隔的字符串转换为一个集合,并查看该集合是否与您的 list 有任何共同的项目A
。使用 LINQ 很容易做到这一点:
var matches = B.Where(s => s.Split(',').Intersect(A).Any()).ToList();
用英语讲:
找出其中的那些字符串
B
(拆分后)至少有一项与 相同A
,并列出结果。
A
请注意,如果放入并放在一起的项目总数B
很大,则此方法将不是很有效。您可以通过将过滤器预处理A
为 aHashSet<string>
并将过滤器重写为
var set = new HashSet<string>(A);
var matches = B.Where(s => s.Split(',').Any(n => set.Contains(n))).ToList();
此版本产生相同的结果,并且对于大输入会更快。
你想要的是这样的
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;
您可以使用 Contains 方法,
var 结果 = 新列表();
A.ForEach(a => { Result.AddRange( B.Where(b => b.Contains(a))); });