如何使用自定义比较器和内存优化方式对 mm-yyyy 字符串列表以及混合单词进行排序。
List<string> result = new List<string>();
result.Add("04-2020");
result.Add("03-2021");
result.Add("Nan");
Run Code Online (Sandbox Code Playgroud)
您可以按照 Ran 在他的回答中建议的那样使用 Linq,它会很好地工作。
然而,还有另一种选择可能会更加内存优化(尽管我承认我没有检查):
该List<T>
类型有一个内置Sort
方法,该方法具有多个重载,其中一个重载接受Comparison<T>
委托。
使用它可能会比使用 Linq 更好地进行内存优化,因为您不需要分配新的List<T>
. 以下是使用它的一种方法(当然,您可以使用命名方法而不是 lambda 表达式):
result.Sort((a, b) => {
var dateA = DateTime.TryParseExact(a, "MM-yyyy", CultureInfo.InvariantCulture,DateTimeStyles.None, out var dtA) ? dtA : DateTime.MinValue; // change to MaxValue if needed
var dateB = DateTime.TryParseExact(b, "MM-yyyy", CultureInfo.InvariantCulture,DateTimeStyles.None, out var dtB) ? dtB : DateTime.MinValue; // change to MaxValue if needed
return dateB.CompareTo(dateA); // Assending order
return dateA.CompareTo(dateB); // Descending order
});
Run Code Online (Sandbox Code Playgroud)
您可以Linq
使用DateTime.TryParseExact来实现此目的
var orderedList = result.OrderByDescending(x =>
DateTime.TryParseExact(x, "MM-yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out var dt)
? dt
: default
).ToList();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
109 次 |
最近记录: |