我有一組路徑(例如C:\Users
,C:\Users\cheese
,D:\Shadow\stuff
,D:\Shadow
)。有什麼辦法擺脫路徑較小的字符串?例如只留下C:\Users\cheese
和D:\Shadow\stuff
,並使其快速和內存不密集?過濾掉以字符串開頭的路徑字符串
字符串可以以任意順序出現很重要。
我有一組路徑(例如C:\Users
,C:\Users\cheese
,D:\Shadow\stuff
,D:\Shadow
)。有什麼辦法擺脫路徑較小的字符串?例如只留下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;
}
結果:
[
"D:\\Shadow\\stuff",
"C:\\Users\\cheese"
]
請分享你所擁有試過。你的解決方案太慢了嗎?吃太多的記憶?你打算支持多少個字符串?我喜歡這個座右銘:讓它工作,把它做好,讓它快速。 –
如果你可以定義'較小的路徑',這是可能的。 – oleksii
爲什麼不計算反斜槓? –