Как наиболее эффективно получить все имена файлов в списке, которые заканчиваются расширениями, соответствующими расширениям в предопределенном массиве?

В частности, у меня есть список файлов и массив расширений сжатых файлов — я пытаюсь получить все zip-файлы в папке для последующей обработки. Я просмотрел пару других ответов StackOverflow, но все они включали серию операторов «Содержит», разделенных операторами или. Что делать, если я хочу добавить новое расширение во время выполнения? Это просто не сработает для меня.

string[] zipExts = new string[] { "zip", "tar.gz", "rar", "jar", "iso" };

// PseudoCode : Get a list of files
files = getfiles()

// Existing StackOverflow answers - their suggested way of doing things
var zips = files.FindAll(f => f.ToLower().Contains(zipExts[0].ToLower()) ||
    f.ToLower().Contains(zipExts[1].ToLower()) || 
    f.ToLower().Contains(zipExts[2].ToLower()) || 
    f.ToLower().Contains(zipExts[3].ToLower()) || 
    f.ToLower().Contains(zipExts[4].ToLower()));

Каков более эффективный способ сделать это, не требующий серии или операторов или цикла?

Мой собственный ответ (тот, который я нашел сам, а затем решил задокументировать, потому что я не смог найти его в StackOverflow) является еще более чистой версией, чем ответ на вопрос, который я дублирую, потому что я знал, что более краткий способ сделать это (просто не знал, как), поэтому я не принял другие ответы.


person Zachary Johnson    schedule 18.07.2017    source источник
comment
1,5 минуты. Вы сами ответили на свой вопрос за 1,5 минуты.   -  person Bender Bending    schedule 18.07.2017
comment
Что именно вы спрашиваете? Как получить только те файлы, которые соответствуют определенному расширению? Если вы спрашиваете, как лучше всего что-то сделать, это не по теме для Stack Overflow.   -  person maccettura    schedule 18.07.2017


Ответы (1)


Я понял это, немного подумав.

var zips = files.FindAll(f => zipExts.Any(z => f.EndsWith(z));

Не смог ответить на мой пост во время его публикации (не видел кнопки, по глупости предположил, что мне просто нужно было ответить после публикации моего вопроса), задокументировать знания (я нашел ответ до того, как начал задавать этот вопрос).

person Zachary Johnson    schedule 18.07.2017