首页 > 解决方案 > 对包含浮点数的字符串列表进行排序

问题描述

我有一个包含字段编号的对象列表。该字段是一个包含浮点数的字符串:0.5、0.2、10.0、2.2、2.1、1.1、1.0、2.12、1.14。我希望这个列表根据这个数字排序(后代)所以我有这个输出:10.0、2.2、2.12、2.1、1.14、1.1、1.0、0.5、0.2。

我试图这样做:

List<MyObject> sortedList = myUnsortedList.OrderyDescending(x => x.Number).ToList();

此外,我曾尝试像这样使用 PadLeft(正如该用户建议的那样https://stackoverflow.com/a/6396523/3872144):

int maxlen = myUnsortedList.Max(x => x.Number.Length);

List<MyObject> sortedList = myUnsortedList.OrderyDescending(x => x.Number.PadLeft(maxlen, '0'));

但在这两种情况下,我都得到了错误的结果,例如:2.12、10.0、2.2、2.1、1.14、1.1、1.0、0.5、0.2。

你知道如何解决这个问题吗?

标签: c#.netlinq

解决方案


问题出现了string,如果您存储 a ,为什么您首先拥有 a double。您应该尽快解析它们(或防止它们是加载它们的字符串)。

但是,您始终可以尝试在之后解析它们:

List<MyObject> sortedList = myUnsortedList
    .OrderyDescending(x => double.Parse(x.Number))
    .ToList();

如果您不知道它们是否具有您可以使用的所有有效格式double.TryParse。也许您需要传递适当CultureInfo的 to double.Parse(例如,如果您当前的文化使用逗号作为小数分隔符)。


推荐阅读