从另一个列表中排除包含值的列表项

35

有两个列表:

List<string> excluded = new List<string>() { ".pdf", ".jpg" };
List<string> dataset = new List<string>() {"valid string", "invalid string.pdf", "invalid string2.jpg","valid string 2.xml" };

我该如何从"dataset"列表中过滤掉包含"excluded"列表中任意关键词的值?


1
正如abatishchev所说,如果excluded很大,将其定义为HashSet<string> - Jodrell
谢谢。如果我们正在讨论哈希集,我会给出这个话题的讨论链接:https://dev59.com/nnM_5IYBdhLWcg3wvV5w - lekso
HashSet不太有用,因为这里不涉及到集合的差异。 - undefined
6个回答

46
var results = dataset.Where(i => !excluded.Any(e => i.Contains(e)));

1
无法在列表中找到 Contains? - Choco
1
@Choco: 使用 System.Linq; - Jhollman
我添加了 using system.Linq,但它不知道 exclude。 - mahdi
@mahdi excluded 是包含要排除项的列表的名称。 - SvenAelterman

20
// Contains four values.
int[] values1 = { 1, 2, 3, 4 };

// Contains three values (1 and 2 also found in values1).
int[] values2 = { 1, 2, 5 };

// Remove all values2 from values1.
var result = values1.Except(values2);

https://www.dotnetperls.com/except


这个答案怎么可能没有被标记为正确答案,也没有得到最多的投票?明显地,其他所有的答案都是错误的,因为这个答案是最优秀的! - undefined
1
因为这不是正确的答案。 - undefined

7

尝试:

var result = from s in dataset
             from e in excluded 
             where !s.Contains(e)
             select e;

0
var result=dataset.Where(x=>!excluded.Exists(y=>x.Contains(y)));

当排除列表为空时,这也适用。


-1
var RemoveList = List1.Select(e => e.name).ToList(); var Result = List2.Where(e => !RemoveList.Contains(e.name)).ToList();
在SQL中,这是一种简单的方法,类似于NOT Equals,可以从另一个列表中移除项目。

他们不是在寻求字符串的平等。 - undefined

-1

var result = dataset.Where(x => !excluded.Contains(x));

变量结果 = 数据集.筛选(x => !排除包含(x));


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接