C# 如何使用字符串值对对象列表进行排序
C# How to sort list of objects with string values
我需要使用 IComparable
:
对字符串值列表进行排序
10.1, 10.10, 10.11, 10.2, 10.3
预期结果:
10.1, 10.2, 10.3, 10.10, 10.11
尝试使用 list.Sort
但没有用
基本上您想要做的是按字符串中小数点后的数字排序。因此,只取那部分,将其转换为数字,然后进行排序。使用 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
我需要使用 IComparable
:
10.1, 10.10, 10.11, 10.2, 10.3
预期结果:
10.1, 10.2, 10.3, 10.10, 10.11
尝试使用 list.Sort
但没有用
基本上您想要做的是按字符串中小数点后的数字排序。因此,只取那部分,将其转换为数字,然后进行排序。使用 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