【问题标题】:Sorting a List of Doubles对双打列表进行排序
【发布时间】:2018-01-11 09:46:29
【问题描述】:

我正在尝试按列表包含的 x 个对象之一中的值对列表进行排序。这是我需要的顺序:

1
1.1
1.2
1.3
1.4
1.5
1.10
1.11
1.12
4.1
4.2
4.15

我尝试了以下方法:

var lRetItems = lExportItems.OrderBy(d => d.linkid);

IEnumerable<item> lRetItems = 
from x in lExportItems
orderby x.linkid
select x;

但两者都没有给我想要的顺序,因为这些方法 1.10 遵循 1.1 而不是 1.2 遵循 1.1。以下是上述方法提供的错误排序示例:

1
1.1
1.10
1.11
1.12
1.2
1.3
1.4
...

有谁知道我如何以与第一个示例相同的方式对列表进行排序?

【问题讨论】:

  • @DanHall 他们双打,但你想要是字符串。
  • 如果他们是double-s,那么1.11.10有什么不同?
  • 这是非常不安全的:1.3 在幕后通常是 1.299999999...-ish。所以这意味着1.3 可以是最后一个元素。
  • @RufusL 谁不喜欢猜谜游戏:)
  • @Chris 这几乎没用,因为您无法在双重列表中捕获 1.11.10 之间的区别。您甚至无法将它们以不同的方式转换为字符串...除非使用某种 if-logic

标签: c# sorting


【解决方案1】:

试着把这些双倍货币想象成你的本国货币。为了举例,让我们假设美元。 1.2 美元比 1.10 美元多,而后者又与 1.1 美元(又名 1.10 美元 == 1.1 美元)相同,如果它们是字符串而不是数字,则不会产生相同的结果.

如果这些是字符串,“1.10”会出现在“1.5”之后,因为它的长度更大,而不是因为它的内容。尽可能尝试一下。

【讨论】:

  • 谢谢,但字符串的排序顺序完全相同:-/
  • 尝试使用实际的 List 而不是 IQueryable 或 IEnumerable。 List lRetItems = lExportItems.Select(l => l.linkid).ToList();
猜你喜欢
  • 1970-01-01
  • 2012-10-16
  • 1970-01-01
  • 1970-01-01
  • 2014-06-21
  • 1970-01-01
  • 1970-01-01
  • 2021-08-19
  • 2019-07-21
相关资源
最近更新 更多