【问题标题】:Sort List by string converted to int按转换为 int 的字符串对列表进行排序
【发布时间】:2017-02-08 13:42:58
【问题描述】:

我有一个保存为字符串的 Int 列表,我想订购它们。 我想出了以下解决方案:

sortList = sortList.OrderByDescending(x => Convert.ToInt32(x.Number)).ToList();

它可以完美运行,但前提是列表only包含数字。例如,如果有一个项目是像“???”这样的字符串排序完全失败。

期望:

['313', '309', '119', '49', '???']

结果:

['309' '49' '313' '119' '???']

【问题讨论】:

  • 什么是x.Number
  • x.Number 是对象中的字符串。
  • 您的输出显示类似字符串的内容,但字符串没有 Number 属性。如果您有对象,则输出应类似于 [{Number:"309"},{Number:"49"}...]
  • @HimBromBeere:我认为他是在说第二个列表是他实际得到的(即糟糕的结果),而不是他想要的第一个列表。

标签: c# linq list sorting


【解决方案1】:

所以你需要使用int.TryParse() 并为无效字符串返回一个低值:

sortList = sortList.OrderByDescending(x =>
    {
        int i;
        return int.TryParse(x.Number, out i) ? i : int.MinValue;
    });

我使用OrderByDescending 而不是OrderBy,因为您显示的预期结果是按降序排列的。

【讨论】:

  • @MaksimSimkin 他的期望是降序排列,
【解决方案2】:

C# 7 中,您可以通过使用out-variables 将其减少到仅一行,同时仍使用TryParse()

sortList = sortList.OrderBy(x => Int32.TryParse(x.Number, out var i) ? i : Int32.MinValue).ToList();

【讨论】:

猜你喜欢
  • 2021-06-10
  • 2014-04-15
  • 2018-07-02
  • 2012-04-03
  • 1970-01-01
  • 2018-07-07
  • 1970-01-01
  • 2011-08-24
  • 2014-02-21
相关资源
最近更新 更多