2016-08-24 150 views
2

想象一下,我有一個字符串列表或在其中的字符串字段中的一個包含自定義列表以下數據排序使用LINQ凡列表包含字母和數字

甲5 d 3 1 B 2 4℃

如何排序該列表使得輸出將是

ABCD 1 2 3 4 5

其中作爲Orderby給出以下答案

1 2 3 4 5 ABCD

回答

1

可以使用下面LINQ,其通過數字值由字母值對列表進行排序,然後:

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

給我一個運行時錯誤說至少有一個對象必須實現IComparable。 – vikas

+0

,因爲編譯器不知道如何比較您的值並執行排序。您的類型必須實現IComparable – Maverick

+1

Tq。其工作原理 – vikas

2

很多簡單的方法:

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

第一個OrderBy將按如下方式對列表進行排序:ABCD53124,這是因爲OrderBy將按照falsetrue的順序評估布爾值。下面ThenBy會給你預期的結果是ABCD12345

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(); 
0

一種方法是將字母優先。

list.OrderBy(x=> char.IsDigit(x)? 255+x : x); 
相關問題