想象一下,我有一個字符串列表或在其中的字符串字段中的一個包含自定義列表以下數據排序使用LINQ凡列表包含字母和數字
甲5 d 3 1 B 2 4℃
如何排序該列表使得輸出將是
ABCD 1 2 3 4 5
其中作爲Orderby
給出以下答案
1 2 3 4 5 ABCD
想象一下,我有一個字符串列表或在其中的字符串字段中的一個包含自定義列表以下數據排序使用LINQ凡列表包含字母和數字
甲5 d 3 1 B 2 4℃
如何排序該列表使得輸出將是
ABCD 1 2 3 4 5
其中作爲Orderby
給出以下答案
1 2 3 4 5 ABCD
可以使用下面LINQ,其通過數字值由字母值對列表進行排序,然後:
var result = list.OrderByDescending(x => x.All(char.IsLetter))
.ThenByDescending(x => x.Any(char.IsDigit))
.ThenBy(x => x)
.ToList();
很多簡單的方法:
string inputString = "A5D31B24C";
var Output = inputString.OrderBy(x => Char.IsDigit(x)).ThenBy(x=>x).ToList();
第一個OrderBy
將按如下方式對列表進行排序:ABCD53124
,這是因爲OrderBy將按照false
和true
的順序評估布爾值。下面ThenBy
會給你預期的結果是ABCD12345
使用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();
一種方法是將字母優先。
list.OrderBy(x=> char.IsDigit(x)? 255+x : x);
給我一個運行時錯誤說至少有一個對象必須實現IComparable。 – vikas
,因爲編譯器不知道如何比較您的值並執行排序。您的類型必須實現IComparable – Maverick
Tq。其工作原理 – vikas