Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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# 排序列表<;字符串>;如Excel列排序 请考虑以下列表: "A", "C", "AB", "AD", "N", "Z", "AC"_C#_Linq_Sorting_C# 4.0 - Fatal编程技术网

C# 排序列表<;字符串>;如Excel列排序 请考虑以下列表: "A", "C", "AB", "AD", "N", "Z", "AC"

C# 排序列表<;字符串>;如Excel列排序 请考虑以下列表: "A", "C", "AB", "AD", "N", "Z", "AC",c#,linq,sorting,c#-4.0,C#,Linq,Sorting,C# 4.0,我想像Excel列排序一样对这个字符串(即Excel列)进行排序 我想要这样的结果: "A", "C", "N", "Z", "AB", "AC", "AD" 可以使用LINQ OrderBy吗 最好的方法是什么 感谢更新:感谢@JeppeStigNielsen的正确评论,我添加了StringComparer.Ordinal以支持所有区域性: var result = List.OrderBy(p=>p.Length).ThenBy(p=>p,StringComparer.Ordi

我想像Excel列排序一样对这个字符串(即Excel列)进行排序

我想要这样的结果:

"A", "C", "N", "Z", "AB", "AC", "AD"
可以使用LINQ OrderBy吗

最好的方法是什么


感谢更新:感谢@JeppeStigNielsen的正确评论,我添加了
StringComparer.Ordinal
以支持所有区域性:

var result = List.OrderBy(p=>p.Length).ThenBy(p=>p,StringComparer.Ordinal);

首先按列名的长度排序(“C”在“AB”之前),然后对相同长度的字符串使用普通字母(字符串)排序(“AC”在“AD”之前)


如果我在你的位置,我会尝试对可用字符的ascii码求和,然后对其排序。例如A=65,C=67。。。AB=65+66=131,依此类推。只需注意:调用了此顺序。如果您以.NET 4.5(2012)或更高版本为目标,即使您标记此C#4.0,并且如果您想对
列表进行排序,您可以使用类似于
yourStringList.Sort(Comparer.Create((x,y)=>{var C=x.Length.CompareTo(y.Length);如果(C!=0){return C;}返回x.CompareTo(y);})。如果列表可能包含
null
值,您当然需要注意lambda中的值。@Mohithrivastava,但这会使
“AB”
“BA”
相等。绝对正确@JeppeStigNielsen
.OrderBy(p=>p.Length).ThenBy(p=>p)是执行此操作的最佳方式。:)我想了一下。这应该是
,然后是(p=>p,StringComparer.Ordinal)
。否则,它将以一种复杂的方式依赖于当前的文化。例如,对于立陶宛语(立陶宛)
“lt lt”
,您将在
“R”
之前有
“Y”
(在立陶宛语中,字母Y在I和J之间比较)。另一个例子是,在捷克(捷克共和国)
“cs CZ”
中,我们在
“CH”
之前得到
“DI”
,因为CH在捷克语中是a,在排序中位于H之后。使用
StringComparer.Create(new-CultureInfo(“lt”),false)
等自己测试。
var columns = new[] { "A", "C", "AB", "AD", "N", "Z", "AC" };
var sorted = columns.OrderBy(c => c.Length)
                    .ThenBy(c => c);