说我有这个清单
List<string> sampleList = new List<string>
{
"C:\\Folder1",
"D:\\Folder2",
"C:\\Folder1\\Folder3",
"C:\\Folder111\\Folder4"
};
我想删除其他文件夹中包含的路径,例如我们有C:\ Folder1和C:\ Folder1 \ Folder3
列表的第三个条目应该消失,因为C:\ Folder1包含C:\ Folder1 \ Folder3
在.net框架中是否存在这样的问题,或者我是否必须自己编写算法?
答案 0 :(得分:3)
我很可能会在规范化路径字符串上使用字符串操作:
path1 = Path.GetFullPath(path1);
path2 = Path.GetFullPath(path2);
// depending on os, ignore casing, eg by converting to lowercase
if (path1.StartsWith(path2))
{
// ...
}
完整示例:
var normalizedPaths = sampleList
.Select(x => Path.GetFullPath(x).ToLowerCase())
.ToList();
var reducedList = normalizedPaths
.Distinct()
.Where(x => !normalizedPaths.Contains(
y => y.StartsWith(x + Path.DirectorySeparatorChar)
&& x != y));
答案 1 :(得分:2)
假设它不是一个巨大的列表。
List<string> sampleList = new List<string>
{
"C:\\Folder1",
"D:\\Folder2",
"C:\\Folder1\\Folder3",
"C:\\Folder111\\Folder4",
"C:\\Folder1"
};
string sep = Path.DirectorySeparatorChar.ToString();
List<string> shortList = sampleList.Where (l =>
sampleList.Where(s =>
l.StartsWith(s + (s.EndsWith(sep) ? String.Empty : sep)) && s != l).Count() == 0
).Distinct().ToList();
答案 2 :(得分:-3)
你应该自己做。你认为.net实现了一种方法来完成这样一个特定的任务吗?使用字符串方法。