我有这样的列表:排序空格分隔数的字符串列表
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)}。
我有这样的列表:排序空格分隔数的字符串列表
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)}。
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");
令人惊异的LINQ魔术!如果你不介意你能解释它是如何工作的? – user2277990
@ user2277990我想如果你把最后一行改为Select(x => x.sortstr),你会看到它形成的字符串进行排序。 – I4V
背后是什么逻辑? –
你能解释一下你的_unusual_排序所需的逻辑吗? – gideon
您可以使用自定义逻辑编写自己的sortmethod。 – Tomtom