我有以下字符串列表
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做到这一点?
您必须将每个以逗号分隔的字符串转换为集合,并查看该集合是否包含与列表相同的任何项目A.LINQ很容易做到这一点:
var matches = B.Where(s => s.Split(',').Intersect(A).Any()).ToList();
Run Code Online (Sandbox Code Playgroud)
用英语讲:
找到那些字符串
B(在拆分后)至少有一个共同的项目A,并列出结果列表.
请注意,如果在项目总数A和B放在一起是巨大此方法不会是非常有效的.您可以通过改善前处理的情况A为HashSet<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)
此版本产生相同的结果,并且对于大输入将更快.
| 归档时间: |
|
| 查看次数: |
66 次 |
| 最近记录: |