排序的文件路徑集合我有一個字符串的集合:如何使用C#LINQ
/a/b/111.txt
/a/b/c/222.txt
a/b/333.txt
a/b/c/d/444.txt
我想這個集合進行排序是這樣的:
/a/b/111.txt
a/b/333.txt
/a/b/c/222.txt
a/b/c/d/444.txt
因此,所有a/b
分組一起等等。
這可以使用linq來完成嗎?或者以其他方式?
排序的文件路徑集合我有一個字符串的集合:如何使用C#LINQ
/a/b/111.txt
/a/b/c/222.txt
a/b/333.txt
a/b/c/d/444.txt
我想這個集合進行排序是這樣的:
/a/b/111.txt
a/b/333.txt
/a/b/c/222.txt
a/b/c/d/444.txt
因此,所有a/b
分組一起等等。
這可以使用linq來完成嗎?或者以其他方式?
你可以做到這一點,
List<string> values = new List<string>();
values.Add("/ a /b/111.txt");
values.Add("/ a/b/c/222.txt");
values.Add("a/b/333.txt");
values.Add("a/b/c/d/444.txt");
var sortedList = values.OrderBy(p => p.Count(c => c == Path.DirectorySeparatorChar || c == Path.AltDirectorySeparatorChar));
工作
這個解決方案的問題在於,例如,如果在序列的開頭有一個類似'/ p/q/222.txt'的路徑,它可以作爲第一個元素 – octavioccl
您可以通過從字符串中的所有斜線實現這一目標進行比較:
items.OrderBy(item => item.Replace("/", ""));
鑑於
var input = new []
{
@"https://stackoverflow.com/a/b/111.txt",
@"https://stackoverflow.com/a/b/c/222.txt",
@"a/b/333.txt",
@"a/b/c/d/444.txt",
};
您可以通過刪除「正常化」字符串中的領先/
(如果有的話),並用它作爲排序鍵:
var output = input.OrderBy(s => s.TrimStart('/')).ToList();
你不能只用'Path.GetDirectoryName(inputStringPathHere)'排序? – Xerillio
'data.OrderBy(x => x.Split('/')。Length)'? – haim770