为了账号安全,请及时绑定邮箱和手机立即绑定

使用LINQ的字母数字排序

使用LINQ的字母数字排序

C#
米琪卡哇伊 2019-09-26 09:39:59
我有一个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 ..
查看完整描述

3 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

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


查看完整回答
反对 回复 2019-09-26
?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

如果要使用LINQ和自定义比较器(如Dave Koelle的自定义比较器)按特定属性对对象列表进行排序,则应执行以下操作:

...items = items.OrderBy(x => x.property, new AlphanumComparator()).ToList();...

您还必须更改Dave的类以从其继承,System.Collections.Generic.IComparer<object>而不是从其继承,IComparer因此类签名变为:

...public class AlphanumComparator : System.Collections.Generic.IComparer<object>{

    ...

就我个人而言,我更喜欢James McCormack的实现,因为它实现了IDisposable,尽管我的基准测试表明它稍慢一些。


查看完整回答
反对 回复 2019-09-26
  • 3 回答
  • 0 关注
  • 735 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信