2014-02-18 186 views
-1

我有一組路徑(例如C:\Users,C:\Users\cheese,D:\Shadow\stuff,D:\Shadow)。有什麼辦法擺脫路徑較小的字符串?例如只留下C:\Users\cheeseD:\Shadow\stuff,並使其快速和內存不密集?過濾掉以字符串開頭的路徑字符串

字符串可以以任意順序出現很重要。

+1

請分享你所擁有試過。你的解決方案太慢了嗎?吃太多的記憶?你打算支持多少個字符串?我喜歡這個座右銘:讓它工作,把它做好,讓它快速。 –

+1

如果你可以定義'較小的路徑',這是可能的。 – oleksii

+0

爲什麼不計算反斜槓? –

回答

1

我會下令路徑遞減的方式,然後枚舉的路徑集合,並將它們添加到結果時,只跳過子路徑:

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" 
] 
+0

這似乎很棒。你知道在T-SQL中是否也有類似的方法? – zaitsman

+0

upd:我重新使用遊標和CHARINDEX()實現了相同的算法。現在再次進行一些分析。 – zaitsman