【问题标题】:C# How to sort list of objects with string values [closed]C#如何使用字符串值对对象列表进行排序[关闭]
【发布时间】:2016-08-22 06:45:34
【问题描述】:

我需要使用IComparable 对字符串值进行排序:

10.1, 10.10, 10.11, 10.2, 10.3 

预期结果:

10.1, 10.2, 10.3, 10.10, 10.11

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

【问题讨论】:

  • 你有什么努力吗?如果你真的想要一个答案意味着显示你正在使用的代码
  • 如果他没有任何想法怎么办,这仍然是一个有效的问题
  • 它并不宽泛,它只是使用比较器对字符串列表进行排序
  • @TonySixx - 正如您从正确但反应过度的回答中看到的那样,对于您的下一个问题,还请描述您尝试做什么以及您如何尝试解决但未能解决跨度>
  • 我想我需要将每个字符串拆分为数组(10.1 到数组 10 和 1),然后使用 pad 将 1 更改为 01,然后将每个部分(如 10 与 10、01 与 10 等)进行比较。我是 C# 的初学者,所以我不知道如何使它工作。

标签: c# string list sorting icomparable


【解决方案1】:

基本上你要做的是按字符串中的小数点后的数字排序。所以,只取那部分,将其转换为数字,然后排序。使用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 - 如果不是这种情况,那么您可以使用 @ 987654327@

【讨论】:

  • 你的意思是双数还是小数
  • @J.Steen 和 @Neil - 我不能只转换为双精度/小数,因为 10.110.10 将是相同的 => 10.1。这就是为什么我把它分成两部分并拼命地排序
  • @GiladGreen 点。我正在查看预期的结果,想知道它有什么问题——现在我知道了。 =)
  • @J.Steen - 是的 :) 这就是为什么它不是简单的双重转换和排序的原因:) - 但离那个不远。如果您喜欢我的解决方案,请点赞,这是您的特权;P
  • @J.Steen - 我确实尽量只给出正确答案:)
猜你喜欢
  • 2012-03-26
  • 1970-01-01
  • 2011-01-14
  • 1970-01-01
  • 2021-01-20
  • 2013-12-31
  • 2015-08-07
  • 1970-01-01
  • 2010-09-07
相关资源
最近更新 更多