使用LINQ的字母数字排序

我有一个string[]其中每个元素都以某个数字结尾的值。

string[] partNumbers = new string[] { 
    "ABC10", "ABC1","ABC2", "ABC11","ABC10", "AB1", "AB2", "Ab11" };

我正在尝试使用以下方式对上面的数组进行排序,LINQ但没有得到预期的结果。

var result = partNumbers.OrderBy(x => x);

实际结果:

AB1 
Ab11 
AB2 
ABC1 
ABC10 
ABC10 
ABC11 
ABC2

预期结果

AB1 
AB2 
AB11 
..


米琪卡哇伊
浏览 738回答 3
3回答

繁星coding

可以在Dave Koelle的站点上找到可以“正常工作”的字母数字排序方法的正确实现。在C#版本在这里。

一只斗牛犬

如果要使用LINQ和自定义比较器(如Dave Koelle的自定义比较器)按特定属性对对象列表进行排序,则应执行以下操作:...items&nbsp;=&nbsp;items.OrderBy(x&nbsp;=>&nbsp;x.property,&nbsp;new&nbsp;AlphanumComparator()).ToList();...您还必须更改Dave的类以从其继承,System.Collections.Generic.IComparer<object>而不是从其继承,IComparer因此类签名变为:...public&nbsp;class&nbsp;AlphanumComparator&nbsp;:&nbsp;System.Collections.Generic.IComparer<object>{ &nbsp;&nbsp;&nbsp;&nbsp;...就我个人而言,我更喜欢James McCormack的实现,因为它实现了IDisposable,尽管我的基准测试表明它稍慢一些。
打开App,查看更多内容
随时随地看视频慕课网APP