【发布时间】:2017-02-22 12:47:34
【问题描述】:
问题:给定 2 个集合,其中 1 个集合部分匹配第二个集合中的某些元素,我如何识别第一个集合中没有出现在第二个集合中的项目?
样本输入和期望输出:
files 有 230 个元素。几个示例:
"C:\Some\Dir\My_File_01.ext"
"C:\Some\Dir\My_File02.ext"
"C:\Some\Dir\My_File3.ext"
"C:\Some\Dir\MyFile4.ext"
names 包含 25 个元素。样品:
"_01"
"e02"
"File_03"
desiredOutput 应包含 1 个元素:"File_03"。我们不想要"_01",因为它匹配files 的第一个元素的尾部。我不想要"e02",因为它也存在于files 的第二个元素中。
我的尝试:
我查看了this question,但很难修改声明以适合我。这就是我所拥有的:
var matching = from f in files where names.Any(n => !f.Contains(n)) select f; // returns 230 elements
我也试过了:
var matching = from n in names where files.Any(f => !n.Contains(f)) select n; // returns the original set of 25 elements from names
还有第三个修改:
var matching = from n in names where files.Any(f => !f.Contains(n)) select n; // also returns the original 25 from names
我还查看了Enumerable.Intersect,但由于两者之间的元素都不相同,因此不适用于我的目的。
【问题讨论】:
-
匹配规则不清楚。你能明确指定它们吗?
-
var 匹配 = names.Where(name => !files.Any(file => file.ToLower().Contains(name.ToLower())));
-
@sab669 很高兴为您提供帮助。