2017-03-09 73 views
-2

是否有可能根據它們的級別和按字母順序使用linq對分段字符串進行排序?如何使用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

我想你可以使用自定義IComparable的做到這一點。 http://stackoverflow.com/questions/985657/use-own-icomparert-with-linq-orderby – Paparazzi

+5

你甚至嘗試過*任何*來實現這一目標嗎?或者我們應該做你的工作? – HimBromBeere

回答

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

+0

這比我的回答要好,因爲它不依賴於分割字符串 – TheLethalCoder

+0

@ TheLethalCoder無論如何都滿足了你的要求,因爲你擊敗了我。 :) –

1

我想你只需要通過數字或零件,然後一個正常的字母順序訂購:

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

一個更好的(也可能更快)的方式做這將是計數字符串,而不是分裂他們(從this answer by @NateBarbettini採取的想法)在. S中的號碼:

var result = list.OrderBy(s => s.Count(c => c == '.')).ThenBy(s => s); 
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 
相關問題