混合字母和数字的字符串字母排序

asdfg123_ 2013-12-15 08:51:54
要将一组数据导入到Excel中,一个键对应一个值,键和值的内容都要导入到Excel中,但是利用SortedDictionary排序后得出的键排序后的结果你不是想要的。应该是先按字母排序,再按数字排序,但是SortedDictionary自动排序得出的结果中按数字排序得出的结果不是想要的,例如想要的是"A10","A11","A01",而SortedDictionary的排序结果却为"A10","A101","A11"。

又如下面:
数据有:"A01", "A02", "A22", "B02", "A23-1", "A23", "A222", "A101", "A10-1", "A11"
想要的排序结果是:"A01", "A02", "A10-1", "A11", "A22", "A23", "A23-1", "A101", "A222", "B02"
而现在的结果是:"A01", "A02", "A10-1", "A101", "A11", "A22", "A222", "A23", "A23-1", "B02"

这该怎么办?
...全文
333 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
asdfg123_ 2013-12-15
  • 打赏
  • 举报
回复
谢谢大神们
bu_ge 2013-12-15
  • 打赏
  • 举报
回复
引用 6 楼 sp1234 的回复:
借用#3楼的代码,可以改一下
var lst = new List<string> { "A01", "A02", "A22", "B02", "A23-1", "A23", "A222", "A101", "A10-1", "A11" };
var query = from t in lst
            let p= t.Split('-')
            let a =p[0][0]
            let b = int.Parse( p[0].Substring(1))
            let c = p.Length < 2 ? 0 : int.Parse(p[1])
            orderby c
            orderby b 
            orderby a
            select t;
感谢提点,学习了,太感谢了
  • 打赏
  • 举报
回复
借用#3楼的代码,可以改一下
var lst = new List<string> { "A01", "A02", "A22", "B02", "A23-1", "A23", "A222", "A101", "A10-1", "A11" };
var query = from t in lst
            let p= t.Split('-')
            let a =p[0][0]
            let b = int.Parse( p[0].Substring(1))
            let c = p.Length < 2 ? 0 : int.Parse(p[1])
            orderby c
            orderby b 
            orderby a
            select t;
  • 打赏
  • 举报
回复
引用 3 楼 bf6543 的回复:

List<string> lst = new string[] { "A01", "A02", "A22", "B02", "A23-1", "A23", "A222", "A101", "A10-1", "A11" }.ToList<string>();
var query = from t in lst
            orderby t.Substring(0, 1) + t.Substring(1).Substring(0, t.Contains('-') ? t.IndexOf('-') - 1 : t.Length - 1).PadLeft(5) + (t.Contains('-') ?"-":"")
            select t;
List<string> s = query.ToList<string>();
建议改为 orderby ..... orderby ..... orderby ..... 这样三段来排序。
  • 打赏
  • 举报
回复
引用 2 楼 asdfg123_ 的回复:
[quote=引用 1 楼 insus 的回复:] 学习与参考下面的方法: http://www.cnblogs.com/insus/category/508018.html
看了,但是没有[/quote] 呵呵,那里的排序就是
bu_ge 2013-12-15
  • 打赏
  • 举报
回复

List<string> lst = new string[] { "A01", "A02", "A22", "B02", "A23-1", "A23", "A222", "A101", "A10-1", "A11" }.ToList<string>();
var query = from t in lst
            orderby t.Substring(0, 1) + t.Substring(1).Substring(0, t.Contains('-') ? t.IndexOf('-') - 1 : t.Length - 1).PadLeft(5) + (t.Contains('-') ?"-":"")
            select t;
List<string> s = query.ToList<string>();
asdfg123_ 2013-12-15
  • 打赏
  • 举报
回复
引用 1 楼 insus 的回复:
学习与参考下面的方法: http://www.cnblogs.com/insus/category/508018.html
看了,但是没有
insus 2013-12-15
  • 打赏
  • 举报
回复
学习与参考下面的方法: http://www.cnblogs.com/insus/category/508018.html

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧