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

如何在C#中基于日期时间键值对嵌套字典进行排序

在C#中按日期时间对嵌套字典排序的实现方法

首先要明确:C#中的普通Dictionary<TKey, TValue>本身不保证元素的存储顺序,所以我们需要先将字典的键值对转换为可排序的集合,基于Creation_Date和Creation_Time字段完成排序后,再处理结果。

方法一:先筛选再排序,最后构建集合

你可以先从Load_User中筛选出符合条件的用户,直接按日期时间排序后再添加到目标集合,这样能避免后续再对_Standard_User做二次排序:

// 筛选符合条件的用户,并按创建日期时间排序
var sortedFilteredUsers = Load_User
    .Where(user => user.Value.Projects[0].type == "0")
    .OrderBy(user => DateTime.Parse($"{user.Value.Projects[0].Creation_Date} {user.Value.Projects[0].Creation_Time}"));

foreach (var user in sortedFilteredUsers)
{
    print("Standard User");
    
    _Standard_User.Add(user.Key, new Dictionary<string, string>() { 
        { "Email", user.Value.Email },
        { "age", user.Value.age},
        {"userName", user.Value.userName},
        {"mobile", user.Value.mobile},
        {"instagram_handle", user.Value.instagram_handle},
        { "City_Of_Residence", user.Value.City_Of_Residence },
        { "nationality", user.Value.nationality },
        { "No_of_Votes", user.Value.No_of_Votes.ToString()},
        {"Brief", user.Value.Projects[0].Brief},
        {"Creation_Date", user.Value.Projects[0].Creation_Date},
        {"Creation_Time", user.Value.Projects[0].Creation_Time},
        {"type", user.Value.Projects[0].type},
        {"localId", user.Value.localId},
        {"thumbnail_image", user.Value.Projects[0].thumbnail_image}
    });
}

方法二:对已构建的_Standard_User字典排序

如果已经完成_Standard_User的构建,需要对其排序,可将字典转换为List<KeyValuePair<...>>来保存有序结果:

// 将_Standard_User转换为列表并排序
var sortedStandardUsers = _Standard_User
    .OrderBy(kv => DateTime.Parse($"{kv.Value["Creation_Date"]} {kv.Value["Creation_Time"]}"))
    .ToList();

注意事项:避免日期解析异常

如果你的日期/时间格式是固定的(比如yyyy-MM-dd和HH:mm:ss),建议用DateTime.TryParseExact来确保解析安全,避免格式不匹配导致的运行时异常:

using System.Globalization;

// 替换为你实际的日期、时间格式
string dateFormat = "yyyy-MM-dd";
string timeFormat = "HH:mm:ss";
string fullFormat = $"{dateFormat} {timeFormat}";

var sortedStandardUsers = _Standard_User
    .Where(kv => 
    {
        string fullDateTimeStr = $"{kv.Value["Creation_Date"]} {kv.Value["Creation_Time"]}";
        return DateTime.TryParseExact(fullDateTimeStr, fullFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out _);
    })
    .OrderBy(kv => DateTime.ParseExact($"{kv.Value["Creation_Date"]} {kv.Value["Creation_Time"]}", fullFormat, CultureInfo.InvariantCulture))
    .ToList();

关键提示

  • 普通Dictionary不保留顺序,所以排序后的结果必须用List<KeyValuePair<...>>或OrderedDictionary来存储,才能保证后续遍历是有序的。
  • 确保Creation_Date和Creation_Time的字符串格式能被正确解析为DateTime对象,若格式特殊需调整ParseExact中的格式参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 19:51:53