使用Linq排序其中列表包含字母和数字

时间:2016-08-24 04:47:37

标签: c# .net linq

想象一下,我有一个字符串列表或自定义列表,其中一个字符串字段包含以下数据

  

A 5 D 3 1 B 2 4 C

如何对此列表进行排序,以便输出

  

A B C D 1 2 3 4 5

其中Orderby给出以下答案

  

1 2 3 4 5 A B C D

4 个答案:

答案 0 :(得分:2)

更简单的方法:

string inputString = "A5D31B24C";
var Output = inputString.OrderBy(x => Char.IsDigit(x)).ThenBy(x=>x).ToList();

第一个OrderBy将按如下方式对列表进行排序:ABCD53124,这是因为OrderBy将按false然后true的顺序评估布尔值。以下ThenBy将为您提供ABCD12345

的预期结果

答案 1 :(得分:1)

您可以使用以下LINQ,按字母顺序对列表进行排序,然后按数值排序:

 var result = list.OrderByDescending(x => x.All(char.IsLetter))
     .ThenByDescending(x => x.Any(char.IsDigit))
     .ThenBy(x => x)
     .ToList();

答案 2 :(得分:0)

像这样使用OrderBy

List<char> str = new List<char>{'A' ,'5' ,'D', '3', '1' ,'B' ,'2' ,'4' ,'C'};
//Or string str = "A5D31B24C";
var sorted = str.OrderBy(c => char.IsLetter(c) ? 0 : 1).ThenBy(c => c).ToList();

答案 3 :(得分:0)

一种方法是优先考虑信件。

list.OrderBy(x=> char.IsDigit(x)? 255+x : x);