通过基本路径过滤所有路径的最有效/优雅的方法是什么?
我有一个路径列表和一个基本路径,我想要一个路径列表作为基本路径的子路径:
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
答案 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),所以它应该更快,但要注意它可以/将改变列表的顺序。