Каков наиболее эффективный / элегантный способ фильтрации списка путей по базовому пути? - PullRequest
2 голосов
/ 13 июля 2011

Какой самый эффективный / элегантный способ отфильтровать все пути по базовому пути?

У меня есть список путей и базовый путь, и я хочу получить список путей, которые являются потомками базового пути:

public IList<string> FilterPathList(IList<string> paths, string basePath)
{
  // return a list of paths that are children of the base path
}

Пример ввода:

c:\foo\bar\file1
c:\foo\bar\file2
c:\foo\bar\dir1\file11
c:\foo\bar\dir2\file
c:\foo\other\file1

Base path -> c:\foo\bar

Ожидаемый результат:

c:\foo\bar\file1
c:\foo\bar\file2
c:\foo\bar\dir1\file11
c:\foo\bar\dir2\file

Ответы [ 2 ]

4 голосов
/ 13 июля 2011

Что-то вроде:

paths.Where(p => p.StartsWith(basePath)).ToList();

Возможно, вы захотите указать, где сделать сравнение без учета регистра, если, конечно, вы не нормализуете регистр.

Это также вернет базовый путь, если он есть в списке.

3 голосов
/ 13 июля 2011

Использование (Параллельно) -LINQ:

public IList<string> FilterPathList(IList<string> paths, string basePath)
{
    var result = from s in paths.AsParallel()
                 where s.StartsWith(basePath)
                 select s;
    return result.ToList();
}

AsParallel() выполняет работу в нескольких потоках (если достаточно большой и> 1 ЦП), поэтому он должен быть быстрее, но помните, что он может/ изменит порядок списка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...