按字典顺序对LINQ的整数序列进行排序

时间:2015-10-09 00:46:01

标签: linq sorting

我试图找到一种优雅的方法来对LINQ中的整数序列进行词法排序。换句话说,如果我有这些整数序列

  • 7,10,12,14,15
  • 10,12,15
  • 10
  • 7,15
  • 14,15

我希望他们像这样排序出来

  • 7,10,12,14,15
  • 7,15
  • 10
  • 10,12,15
  • 14,15

与字符排序字符串的基本思路相同,只是我想对一系列整数进行排序。我不想按字母顺序排序,但我确实希望对序列进行词汇排序。

1 个答案:

答案 0 :(得分:1)

您可以将数字转换为字符串,将它们全部填充到相同的长度并将它们连接在一起,然后对其进行排序,最后再将它们拆分。

var intLists = new List<List<int>>
{
    new List<int> { 7, 10, 12, 14, 15 },
    new List<int> { 10, 12, 15 },
    new List<int> { 10 },
    new List<int> { 7, 15 },
    new List<int> { 14, 15 },
};

var orderedLists = intLists
    .Select(l => string.Join("", l.Select (x => x.ToString().PadLeft(10))))
    .OrderBy(l => l)
    .Select(l => l.Split(new [] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
        .Select (x => int.Parse(x)));