c# - 如何按前两个字符然后按字母顺序对列表中的对象属性进行排序

标签 c# .net sorting generics

我有一个对象列表。对象是保险单。好吧,每个保单号码的第一部分都是字母字符,然后都是数字。我需要对列表中保单编号以 CA 开头的所有保单进行排序,然后按字母数字排序。例如,如果我有三个保单,AB10001、CA20001、CA20003,则顺序应首先全部为“CA”,然后按如下所示对其余部分进行排序:在此处输入代码

CA20001
CA20003
AB10001

据我了解常规排序,让我失望的是如何首先获得所有 CA,因为它们不适用于 alpha 顺序。我认为有可能将所有以 CA 为前缀的策略名称拉到一个新列表中,然后按数字排序。然后将剩菜分类到第二个列表中。然后将第二个列表附加到“CA”排序列表(如果有意义)。使用 lambda 一定有一种更简洁的方法。

最佳答案

你可以通过类似的东西来实现这一点。

var list = new List<string> { "AB10001", "CA20003", "CA20001" };

var ordered = list.OrderByDescending(s => s.StartsWith("CA")).ThenBy(s => s);

foreach(var o in ordered) Console.WriteLine(o);

输出

CA20001

CA20003

AB10001

基本上,您首先根据是否以“CA”开头对所有内容进行排序,然后根据实际的字符串值进行排序。您必须使用降序,因为 false 被认为小于 true

关于c# - 如何按前两个字符然后按字母顺序对列表中的对象属性进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36045090/

相关文章:

c# - 从 C# AsyncCTP 使用 ExecuteReaderAsync 的任何缺点

c# - Expand 在查询中做了什么?

c# - 单元测试中的逻辑

php - 排序 postgresql 数据库转储 (pg_dump)

JavaScript 表格排序

c# - 如何在 C# 或 C++ 中使用条件语句检查/比较四个变量是否相同或不同

c# - 为什么 Shellexecute=false 会破坏这个?

javascript - 将字符串数组从 ajax 函数传递到 mvc Controller

c# - 日期时间选择器 Winforms : Move focus left arrow key

c# - 我可以用二进制而不是十六进制嵌入数字吗?