2016-05-03 2 views
1

У меня есть каталог со списком файлов там:Группировка файлов по общему тексту в названиях с использованием лямбды

ITEM_jazz_list_20160209.txt 
ITEM_jazz_list_20160209.txt 
ITEM_piano_list_20160209.txt 

Можно ли написать одно заявление Lambda сгруппировать элементы там по типу (джаз или фортепиано) который является частью текста? Итак, в итоге у меня две группы из 3-х файлов выше?

+0

Да, это так. Что вы уже пробовали? – yaakov

+0

Ничего, к сожалению, я не знаю, как это достичь – Maya

+0

Посмотрите на [GroupBy] (https://msdn.microsoft.com/en-us/library/bb534304 (v = vs.100) .aspx). Этого должно быть достаточно, чтобы вы начали. – yaakov

ответ

4

Возможно:

var groups = Directory.EnumerateFiles(dir, "*.txt") 
    .Select(path => new { path, fileName = System.IO.Path.GetFileNameWithoutExtension(path)}) 
    .Select(x => new { x.path, x.fileName, tokens = x.fileName.Split('_')}) 
    .Where(x => x.tokens.Length >= 4) 
    .GroupBy(x => x.tokens[1]) 
    .Select(g => g.ToArray()) 
    .ToArray(); 
+0

Значки @codran будут содержать фрагменты между символами «_». –

+0

Удивительный, сделал работу, большое спасибо – Maya

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