如何使用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排序会很容易排序——很抱歉造成混淆(

如何使用Linq按长度和值对数组进行排序

试试这个片段:

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仅用于二次订购。如果您需要实现它,则需要调用ToArrayToList

这里的大多数答案都是使用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));