如何使用linq根据级别对分段字符串进行排序?

时间:2017-03-09 16:32:03

标签: c# linq sorting

是否可以根据它们的级别对分段字符串列表进行排序,并使用linq按字母顺序排序?

例如 -

给定清单

System
System.Collection.Generic
System.Generic
System.Linq
System.Linq.Collection.Generic

排序列表

System
System.Generic
System.Linq
System.Collection.Generic
System.Linq.Collection.Generic

3 个答案:

答案 0 :(得分:3)

您可以按每个字符串中.的数量排序:

var sortedItems = items
    // Order by number of periods ("levels")
    .OrderBy(x => x.Count(c => c == '.'))

    // Then everything else alphabetically
    .ThenBy(x => x);

这是一个演示的小提琴:https://dotnetfiddle.net/FivBPA

答案 1 :(得分:1)

我认为您只需按数字或部分订购,然后按正常的字母顺序排序:

var result = list.OrderBy(s => s.Split('.').Length).ThenBy(s => s);

更好(也可能更快)的方法是计算字符串中.的数量,而不是分割它们(从this answer by @NateBarbettini获取的想法):

var result = list.OrderBy(s => s.Count(c => c == '.')).ThenBy(s => s);

答案 2 :(得分:0)

您可以OrderBy()使用Count()

Demo on .NetFiddle

using System;
using System.Linq;


public class Program
{
    public static void Main()
    {
        var k = @"System
System.Collection.Generic
System.Generic
System.Linq
System.Linq.Collection.Generic";

        // We split by new line, then order them by occurrence count of '.'
        var ordered = k.Split('\n').OrderBy(x => x.Count(l => l == '.'))

        foreach (var item in ordered)
            Console.WriteLine(item);
    }
}

输出

System
System.Generic
System.Linq
System.Collection.Generic
System.Linq.Collection.Generic