【发布时间】:2018-03-18 17:51:06
【问题描述】:
前言:我在工作中偶然发现了这个,并认为这是一个有趣的问题。
序言编辑:我们已经有了一个可行的解决方案,但我正在寻找其他方法来解决这个问题。
给定string的集合:
["2015", "2016 New", "2016 Used", "2017 New", "2017 Used", "2018"]
我想按年份降序对该集合进行排序。
但是,我还想应用一个特殊规则,其中包含字符串 "New" 的年份必须在包含字符串 "Used" 的同一年之前。
预期结果:
["2018", "2017 New", "2017 Used", "2016 New", "2016 Used", "2015"]
假设:
-
如果集合包含一个包含
"New"的给定年份字符串,则该集合将始终包含包含"Used"的同一年份(反之亦然),并且永远不会单独包含年份。["2017 New", "2017", "2016 Used", "2016"] // invalid input 年份将在 1000-9999 范围内。
解决此问题的最佳方法是什么?
编辑:
这是我们的解决方案:
var l = new[] { "2015", "2016 New", "2016 Used", "2017 New", "2017 Used", "2018" };
var sorted = l.OrderByDescending(i => i.Replace("Used", "Ased")).ToArray();
// ["2018", "2017 New", "2017 Used", "2016 New", "2016 Used", "2015"]
【问题讨论】:
-
“2017 New”会一直排在“2017 Used”之前,所以可以简单的默认排序。
-
你尝试过什么吗?我们没有做你的工作。
-
@Fabio 是的,但 OP 想要按降序排序。所以默认排序是
2018, 2017 Used, 2017 New, etc etc -
“我们最终得到了预期的结果。”那么问题出在哪里?
-
排序 + 自定义排序 =
IComparable.
标签: c# string linq sorting collections