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

时间:2013-11-15 10:19:30

标签: .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"
}

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

那就是我要输出

Result = {
"1,2,3,4,5,6,7",
"1,2,6,7",
"1"
}

如何使用Linq执行此操作?

3 个答案:

答案 0 :(得分:5)

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

var matches = B.Where(s => s.Split(',').Intersect(A).Any()).ToList();

英文:

  

B中查找(分割后)至少有一个字符串   与A共同的项目,并列出结果列表。

<强> See it in action

请注意,如果AB中的项目总数相当大,则此方法效率不高。您可以通过将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)));});