2013-04-13 48 views
-1

我有这样的列表:排序空格分隔数的字符串列表

List<String> strings = new List<string>(); 
strings.Add("1 23 4"); 
strings.Add("1 4 23"); 

当我排序此我想要的结果为{(1 4 23),(1 23 4)}。然而,通常的字符串排序为{(1 23 4),(1 4 23)}。

+1

背后是什么逻辑? –

+0

你能解释一下你的_unusual_排序所需的逻辑吗? – gideon

+0

您可以使用自定义逻辑编写自己的sortmethod。 – Tomtom

回答

0
var result = strings.Select(s => new { 
            orgstr = s, 
            sortstr = String.Join("", s.Split(' ').Select(x => x.PadLeft(10, '0'))) 
           }) 
        .OrderBy(x => x.sortstr) 
        .Select(x => x.orgstr); 

测试用例

List<String> strings = new List<string>(); 
strings.Add("1 23 4 5 6"); 
strings.Add("1 1 24 2 4"); 
strings.Add("1 4 23 2 4"); 
+0

令人惊异的LINQ魔术!如果你不介意你能解释它是如何工作的? – user2277990

+0

@ user2277990我想如果你把最后一行改为Select(x => x.sortstr),你会看到它形成的字符串进行排序。 – I4V

相关问题