You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# 如何按数组内日期对字典存储的List<string[]>实现升降序排序

实现方案

核心逻辑是先将字符串格式的日期解析为DateTime类型再做排序,通过一个布尔参数即可快速切换升降序模式。

方式1:原地排序(推荐,性能更高,直接修改原列表)

直接调用List<T>自带的Sort方法完成原地排序,无需生成新的集合实例:

using System;
using System.Collections.Generic;
using System.Globalization;

// 排序方向参数:true=升序,false=降序,修改该值即可切换排序模式
bool isAscending = true;

foreach (var dateList in years.Values)
{
    dateList.Sort((item1, item2) =>
    {
        // 按指定格式解析日期,避免系统时区/区域格式影响解析结果
        DateTime date1 = DateTime.ParseExact(item1[0], "MM-dd-yyyy", CultureInfo.InvariantCulture);
        DateTime date2 = DateTime.ParseExact(item2[0], "MM-dd-yyyy", CultureInfo.InvariantCulture);
        
        int compareRes = date1.CompareTo(date2);
        // 根据排序方向参数返回对应比较结果
        return isAscending ? compareRes : -compareRes;
    });
}

方式2:LINQ排序(灵活,可生成新列表不修改原数据)

如果需要保留原列表的顺序、生成新的排序后列表,可以用LINQ实现:

using System.Linq;
using System.Globalization;

bool isAscending = true;

// 遍历字典键时调用ToList避免遍历过程中修改字典导致的异常
foreach (var yearKey in years.Keys.ToList())
{
    IOrderedEnumerable<string[]> orderedList = isAscending
        ? years[yearKey].OrderBy(item => DateTime.ParseExact(item[0], "MM-dd-yyyy", CultureInfo.InvariantCulture))
        : years[yearKey].OrderByDescending(item => DateTime.ParseExact(item[0], "MM-dd-yyyy", CultureInfo.InvariantCulture));
    
    years[yearKey] = orderedList.ToList();
}

效果验证

以你给出的2021年数据为例,升序排序后结果为:

["03-30-2021","246810"],
["06-30-2021","135791"],
["09-30-2021","123456"],
["12-30-2021","654321"]

修改isAscending为false即可得到降序结果。

内容的提问来源于stack exchange,提问作者TrialByErrors

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 18:15:02