【问题标题】:How to find elements from 1 collection which partially matches elements in a second collection?如何从 1 个集合中查找与第二个集合中的元素部分匹配的元素?
【发布时间】: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 很高兴为您提供帮助。

标签: c# linq


【解决方案1】:
var matching = names.Where(name => !files.Any(file => file.ToLower().Contains(name.ToLower())));

Working demo here

【讨论】:

  • 太棒了,我不知道 dotnetfiddle 是一回事!爱它。谢谢。
猜你喜欢
  • 2012-11-24
  • 2021-12-08
  • 2016-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多