通过基本路径过滤路径列表的最有效/最优雅的方法是什么?

时间:2011-07-13 09:25:58

标签: c# .net algorithm path filtering

通过基本路径过滤所有路径的最有效/优雅的方法是什么?

我有一个路径列表和一个基本路径,我想要一个路径列表作为基本路径的子路径:

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 个答案:

答案 0 :(得分:4)

类似的东西:

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

您可能希望充实比较不区分大小写的位置,除非您将案例规范化。

如果它在列表中,它也将返回基本路径。

答案 1 :(得分:3)

使用(并行)-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个CPU),所以它应该更快,但要注意它可以/将改变列表的顺序。