2017-02-22 1 views
0

Вопрос: Учитывая две коллекции, в которых 1 коллекция частично соответствует некоторым элементам во второй коллекции, как я могу идентифицировать элементы в первой коллекции, которые не отображаются во второй коллекции?Как найти элементы из 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, но так как ни один из элементов между два идентичны, это не сработает для моих целей.

+0

правило (s) Matching неясна. Можете ли вы указать их явно? –

+1

var matching = names.Where (name =>! Files.Any (file => file.ToLower(). Содержит (name.ToLower()))); – jitender

+0

@ sab669 Рад помочь вам. – jitender

ответ

1
var matching = names.Where(name => !files.Any(file => file.ToLower().Contains(name.ToLower()))); 

Working demo here

+0

Блестящий, и я не знал, что «dotnetfiddle» - вещь! Любить это. Благодарю. – sab669

Смежные вопросы