C# 筛选出以字符串开头的路径字符串

C# 筛选出以字符串开头的路径字符串,c#,C#,我有一个路径集合(例如C:\Users,C:\Users\cheese,D:\Shadow\stuff,D:\Shadow)。有没有什么方法可以去除路径较小的字符串?e、 g.只留下C:\Users\cheese和D:\Shadow\stuff并使其快速且不占用内存 字符串可以按任意顺序排列,这一点很重要。我会按降序排列路径,然后在枚举路径集合并将其添加到结果时跳过子路径: string[] paths = { @"C:\Users", @"C:\Users\cheese", @"D:\Shad

我有一个路径集合(例如
C:\Users
C:\Users\cheese
D:\Shadow\stuff
D:\Shadow
)。有没有什么方法可以去除路径较小的字符串?e、 g.只留下
C:\Users\cheese
D:\Shadow\stuff
并使其快速且不占用内存


字符串可以按任意顺序排列,这一点很重要。

我会按降序排列路径,然后在枚举路径集合并将其添加到结果时跳过子路径:

string[] paths = { @"C:\Users", @"C:\Users\cheese", @"D:\Shadow\stuff", @"D:\Shadow" };

string currentPath = "";
List<string> result = new List<string>();
var comparer = StringComparer.InvariantCultureIgnoreCase;

foreach (var path in paths.OrderByDescending(p => p, comparer))
{
    if (currentPath.IndexOf(path, StringComparison.InvariantCultureIgnoreCase) >= 0)
        continue;

    result.Add(path);
    currentPath = path;
}

请分享你的尝试。你的解决方案太慢了吗?吃太多的记忆?您打算支持多少个字符串?我喜欢这句格言:让它工作,让它正确,让它快速。这是可能的,如果你能定义
较小的路径
。为什么不计算反斜杠呢?@Erno因为
C:\Foo\Bar\Baz
可能不应该取代
C:\Bar
,但我很想看到OP-answer@oleksii。同样使用@Ed,删除一些字符串可能不会使应用程序更快或更少地占用内存。@CodeCaster啊,是的,这是有意义的。所以删除集合的所有父路径。这看起来很棒。您知道在T-SQL中是否也可以使用类似的方法吗?upd:我用游标和CHARINDEX()重新实现了相同的算法。现在再次进行一些分析。
[
  "D:\\Shadow\\stuff",
  "C:\\Users\\cheese"
]