c#如何对带有字符串值的对象列表进行排序

本文关键字:对象 列表 排序 字符串 | 更新日期: 2023-09-27 18:03:26

我需要使用IComparable:

排序字符串值列表
10.1, 10.10, 10.11, 10.2, 10.3 

预期结果:

10.1, 10.2, 10.3, 10.10, 10.11

尝试使用list.Sort但不工作

c#如何对带有字符串值的对象列表进行排序

基本上,您要做的是按对字符串中小数点之后的数字进行排序。只取这部分,把它转换成数字,然后排序。使用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