私の最初の考えは、文字列の長さによる順序付けでした...しかし、次のようなリストを考えました。これには、短い名前のエイリアスのようなものが含まれる可能性があります。
/ロングサイト名/
/a
/a/b/c/
/a
/a/b/
/otherlongsitename/
...そして、最初にレベル区切り文字の数で注文するのがより良いオプションだと思いました:
IEnumerable<string> SortURLs(IEnumerable<string> urls)
{
return urls.OrderBy(s => s.Count(c => c == '/')).ThenBy(s => s);
}
それから私はそれについてもう少し考えました、そして私はあなたの質問にこの行を見ました:
/node2 が存在しないと /node2/sub-node1 を作成できません
あはは!子が常に親の後にリストされている限り、セクションの順序またはセクション内の順序は重要ではありません。それを念頭に置いて、私の最初の考えは大丈夫で、文字列の長さだけで並べ替えても問題ありません。
IEnumerable<string> SortURLs(IEnumerable<string> urls)
{
return urls.OrderBy(s => s.Length);
}
なぜ私が長さを気にしたのか、ついに疑問に思ったのはなぜですか?文字列を並べ替えるだけでは、長さに関係なく、先頭が同じ文字列は常に短い文字列が最初に並べ替えられます。したがって、最後に:
IEnumerable<string> SortURLs(IEnumerable<string> urls)
{
return urls.OrderBy(s => s);
}
将来のある時点で、より字句的または論理的な並べ替え順序が必要になった場合に役立つ可能性があるため、最初のサンプルは残しておきます。