排序列表<string>,如Excel列排序

Ari*_*ian 3 c# linq sorting c#-4.0

请考虑此清单:

"A", "C", "AB", "AD", "N", "Z", "AC"
Run Code Online (Sandbox Code Playgroud)

我想对此字符串(这是Excel列)进行排序,如Excel列排序.

我想要这样的结果:

"A", "C", "N", "Z", "AB", "AC", "AD"
Run Code Online (Sandbox Code Playgroud)

是否可以使用LINQ OrderBy?

什么是最好的方法?

谢谢

Rez*_*eni 11

更新:感谢@JeppeStigNielsen的正确评论,我StringComparer.Ordinal在所有文化中都添加了支持:

var result = List.OrderBy(p=>p.Length).ThenBy(p=>p,StringComparer.Ordinal);
Run Code Online (Sandbox Code Playgroud)

  • 我想了一下.那应该是`.ThenBy(p => p,StringComparer.Ordinal)`最后.否则,它将以复杂的方式依赖于当前的文化.例如,使用_Lithuanian(立陶宛)_`"lt-LT"`你会在"R"之前得到"Y"`(字母Y在立陶宛语的I和J之间整理).另一个例子,在_Czech(捷克共和国)_`"cs-CZ"`我们在"CH"之前得到"DI"`因为CH是[有向图](https://en.wikipedia.org/wiki/ Ch_(digraph)#Czech)在捷克语中,在其整理后出现在H之后.使用`StringComparer.Create(new CultureInfo("lt-LT"),false)`等测试自己. (2认同)