是否可以根据它们的级别对分段字符串列表进行排序,并使用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
答案 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)
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