我有這樣的列表:排序空格分隔數的字符串列表
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