如何在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
相关产品推荐
相关产品推荐

