C#如何使用字符串值对对象列表进行排序

时间:2016-08-22 06:45:34

标签: c# string list sorting icomparable

我需要使用IComparable排序字符串值列表:

10.1, 10.10, 10.11, 10.2, 10.3 

预期结果:

10.1, 10.2, 10.3, 10.10, 10.11

尝试使用list.Sort,但没有工作

1 个答案:

答案 0 :(得分:2)

基本上您要做的是按字符串中的小数点后面的数字进行排序。因此,只采取该部分,将其转换为数字然后排序。使用Comparer它看起来像

List<string> values = new List<string> { "10.1", "10.10", "10.11", "10.2", "10.3" };

values.Sort((x, y) => int.Parse(x.Split('.')[1]).CompareTo(int.Parse(y.Split('.')[1])));

或者使用linq它看起来像:

var result = values.OrderBy(value => int.Parse(value.Split('.')[1]));

如果您想先按第二部分排序,然后按第一部分排序,则可以执行以下操作:

var result = values.OrderBy(value => int.Parse(value.Split('.')[0]))
                   .ThenBy(value => int.Parse(value.Split('.')[1]))
                   .ToList();

请记住,这个解决方案是天真的,并假设您的所有值都有.,并且可以将其中的2个部分解析为int - 如果不是这样的话您可以使用TryParse