首页 / C# / C#订购不同格式的字符串
C#订购不同格式的字符串
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#订购不同格式的字符串,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1608字,纯文字阅读大概需要3分钟。
内容图文
![C#订购不同格式的字符串](/upload/InfoBanner/zyjiaocheng/686/2fffc6ba6d3a4e30b3dcc26f125407cd.jpg)
我有车牌号,我返回到UI,并希望它们按升序排列:
因此,假设输入如下:
1/12/13/2
1/12/11/3
1/12/12/2
1/12/12/1
我的预期输出是:
1/12/11/3
1/12/12/1
1/12/12/2
1/12/13/2
我当前正在执行此操作的代码是:
var orderedData = allLicenceNumbers
.OrderBy(x => x.LicenceNumber.Length)
.ThenBy(x => x.LicenceNumber)
.ToList();
但是,对于另一个输入示例,如下所示:
4/032/004/2
4/032/004/9
4/032/004/3/A
4/032/004/3/B
4/032/004/11
我得到的数据返回为:
4/032/004/2
4/032/004/9
4/032/004/11
4/032/004/3/A
4/032/004/3/B
当我需要的是:
4/032/004/2
4/032/004/3/A
4/032/004/3/B
4/032/004/9
4/032/004/11
是否有更好的方法可以命令此命令简单地在两个示例输入中给出正确的结果,还是需要编写自定义排序?
编辑
它不会始终是字符串上的相同元素.
这可以是示例输入:
2/3/5/1/A
1/4/6/7
1/3/8/9/B
1/3/8/9/A
1/5/6/7
预期输出为:
1/3/8/9/A
1/3/8/9/B
1/4/6/7
1/5/6/7
2/3/5/1/A
解决方法:
如果我们可以假设
>车牌由(/或多个)部分组成,中间用’/’隔开,例如4,032,004,2
>每个部分的长度不超过某个常数(下面的代码中为3)
>每个部分都由数字(例如4、032)或非数字(例如A,B)组成
我们只需将每个车牌的数字部分用0填充,以便不比较“ 3”和“ 11”(并获得“ 3”>“ 11”),而是填充“ 003”< “ 011”:
var source = new string[] {
"4/032/004/2",
"4/032/004/9",
"4/032/004/3/A",
"4/032/004/3/B",
"4/032/004/11",
};
var ordered = source
.OrderBy(item => string.Concat(item
.Split('/') // for each part
.Select(part => part.All(char.IsDigit) // we either
? part.PadLeft(3, '0') // Pad digit parts e.g. 3 -> 003, 11 -> 011
: part))); // ..or leave it as is
Console.WriteLine(string.Join(Environment.NewLine, ordered));
结果:
4/032/004/2
4/032/004/3/A
4/032/004/3/B
4/032/004/9
4/032/004/11
内容总结
以上是互联网集市为您收集整理的C#订购不同格式的字符串全部内容,希望文章能够帮你解决C#订购不同格式的字符串所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。