【问题标题】:Sort a list alphabetically excluding a letter按字母顺序对列表进行排序,不包括一个字母
【发布时间】:2015-01-18 19:10:03
【问题描述】:

我有一个对象列表,每个对象都有一个名称。我正在尝试按字母顺序对列表进行排序(这很容易完成),但是我希望任何以字母 D 开头的项目都按照字母顺序排序。所以给定项目:

(Apple, Door, Banana, Doorknob, Gorilla, Hammer)  

我想把它排序为:

(Apple, Banana, Gorilla, Hammer, Door, Doorknob) 

我确信我可以使用蛮力来处理这个问题,但我希望有一种方法可以使用带有OrderBy().ThenBy() 的 linq 来解决这个问题,但看起来更多的是对 2 个不同的属性进行排序。我试图用 linq 做的事情是可能的,还是我只需要用老式的方式来做?

【问题讨论】:

    标签: c# linq sorting


    【解决方案1】:

    您可以使用任何返回可排序值的表达式作为排序顺序;它不一定是财产。要将名称以“D”开头的所有对象放在列表末尾,只需使用:

    .OrderBy(o => o.Name.StartsWith("D") ? 1 : 0)
    .ThenBy(o => o.Name)
    

    【讨论】:

    • 您可以通过删除三元运算符来缩短它。 “false”排在“true”之前。
    • @gunr2171 没错,但由于这不直观,我宁愿明确而不是记住它们的排序顺序。
    • 谢谢,这正是我想要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-02
    • 2014-02-08
    • 1970-01-01
    相关资源
    最近更新 更多