-1

我有以下字符串列表

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 做到这一点?

4

3 回答 3

5

您必须将每个逗号分隔的字符串转换为一个集合,并查看该集合是否与您的 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();

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

于 2013-11-15T10:27:51.657 回答
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;
于 2013-11-15T10:39:10.177 回答
-1

您可以使用 Contains 方法,

var 结果 = 新列表();

A.ForEach(a => { Result.AddRange( B.Where(b => b.Contains(a))); });

于 2013-11-15T10:21:59.830 回答