我有以下列表,其中包含一系列文件夹路径。其中一些是多余的,因此我需要删除它们,并且最终列表应仅包含底层文件夹:
初始列表:
var paths = new List<string>
{
"Pavements/",
"Pavements/2019_05/",
"Pavements/2019_06/",
"Pavements/2019_06/A/",
"Roads/",
"Roads/2019_06/"
};
最终列表应如下所示:
paths =
{
"Pavements/2019_05/",
"Pavements/2019_06/A/",
"Roads/2019_06/"
};
即所有上层文件夹路径均已删除。
有人知道我能做到这一点吗?我有一种需要递归方法的感觉,但不确定如何去做。我正在使用C#,但是用Java或类似的方法回答是可以的。 谢谢。
答案 0 :(得分:2)
一种方法是使用linq查询,该查询将每个项目与所有其他项目进行比较,并且仅当其他项目都不以该项目开头时才返回该项目:
paths = paths.Where(path => !paths.Any(p => p != path && p.StartsWith(path))).ToList();