Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 排序列表<;字符串>;基于字符计数_C#_String_List_Sorting - Fatal编程技术网

C# 排序列表<;字符串>;基于字符计数

C# 排序列表<;字符串>;基于字符计数,c#,string,list,sorting,C#,String,List,Sorting,示例: List<string> folders = new List<string>(); folders.Add("folder1/folder2/folder3/"); folders.Add("folder1/"); folders.Add("folder1/folder2/"); List folders=新建列表(); folders.Add(“folder1/folder2/folder3/”; 文件夹。添加(“folder1/”; 文件夹。添加(“fol

示例:

List<string> folders = new List<string>();
folders.Add("folder1/folder2/folder3/");
folders.Add("folder1/");
folders.Add("folder1/folder2/");
List folders=新建列表();
folders.Add(“folder1/folder2/folder3/”;
文件夹。添加(“folder1/”;
文件夹。添加(“folder1/folder2/”;
我想根据字符对列表进行排序,即“/” 因此,我的输出将是
文件夹1/
folder1/folder2/
folder1/folder2/folder3
LINQ:

folders = folders.OrderBy(f => f.Length).ToList(); // consider null strings
List.Sort

folders.Sort((s1, s2) => s1.Length.CompareTo(s2.Length));
如果列表可能包含空值,则为安全方法:

folders = folders.OrderBy(f => f?.Length ?? int.MinValue).ToList();

如果确实要按文件夹深度而不是字符串长度排序,请执行以下操作:

folders = folders.OrderBy(f => f.Split(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar).Length).ToList();  

您可能真的想按名称排序:

folders = folders.OrderBy(f => f).ToList();
或者简单地说:

folders.Sort();
这将在以下情况下正常工作:

folder1/
folder1/subfolder1
folder1/subfolder1/subsubfolder
folder2
folder2/subfolder2

<> P>按长度排序将考虑<>代码>“和<代码>”FoLDR2“< /代码>相等.< /P> >关于<代码> X/Y/Z/K VS <代码> FoLDR1/FoLDR2<代码>,以及“基于字符即‘/'”意味着什么?你是说“数一数那个特定的角色”吗?或者仅仅是字符串的总长度?如果输入是
folder1/
folder1/folder2/
folder1/folder3/
folder1/folder2/folder4/
folder11/
?可能重复@LasseV.Karlsen-是文件夹级别的问题我认为如果列表中的任何字符串为空,这将引发异常。您的变化甚至比我的
f?还要好。长度??0
建议,因为它现在(正确地)将空字符串排序在空字符串之前(这是.NET中大多数排序或排序实现的标准),这不会给出OP要求的输出,例如:m/pics/nat将位于mypersonal_stuff/pictures之前,他想要一个层次结构order@MohamedAhmed你为什么这么想?OP说:“基于字符计数的排序列表”。然而,它也提供了一个解决方案that@TimSchmelter-你的路径答案。目录分隔符。。。帮助!谢谢