如何使用Linq按长度和值对数组进行排序
本文关键字:数组 排序 Linq 何使用 | 更新日期: 2023-09-27 18:01:09
按顺序给定以下值:
011124
01112
011123
1905
我如何使用Linq来排序:
List<string> values = new List<string>() { "011124", "01112", "011123", "1905" };
所以它实际上是这样的:
List<string> values = new List<string>() { "011124", "011123", "01112", "1905" };
(更新:添加了"1905",因为上一个演示使用int排序会很容易排序——很抱歉造成混淆(
试试这个片段:
var sortedValues = values
.OrderByDescending(x => x.Length)
.ThenByDescending(x => Convert.ToInt32(x));
如果您真的需要将其用作List,那么在末尾添加ToList()
。
我假设您实际上关心每个整数的值。如果是:
var sortedValues = values.OrderByDescending(x => x.Length)
.ThenByDescending(x => int.Parse(x));
这将产生一个延迟的IOrderedEnumerable<string>
。int.Parse
仅用于二次订购。如果您需要实现它,则需要调用ToArray
或ToList
。
这里的大多数答案都是使用Lambda语法编写的,如果你想要查询语法,可以试试这个。结果应该相同。
var sortedValues = from x in values
orderby x.Length descending, x descending
select x;
values.OrderByDescending(x => x.Length).ThenByDescending(x => int.Parse(x));