C# Linq实现按日期分组且同日期归为同一分片的方法
解决按日期分组且同日期数据归为同一分片的问题
你的问题核心在于当前代码是完全基于索引位置来拆分列表的,完全没考虑日期维度,所以必然会把同一日期的数据拆到不同分片里。要实现「同一日期必须在同一个分片」的要求,得先按日期分组,再把这些日期组打包成分片,而不是直接按索引硬切。
我给你整理了一个可行的实现思路和代码:
实现步骤
- 第一步:先把原始数据按日期字段分组,确保同一日期的所有数据都在同一个组里
- 第二步:遍历这些日期组,将它们逐个加入当前分片,直到加入下一个组会超过
partionCountValue的限制,就新建一个分片继续添加
示例代码
假设你的数据模型里日期字段叫Date,代码可以这么写:
// 1. 先按日期分组,得到每个日期对应的所有数据 var dateGroups = lstHareket.GroupBy(x => x.Date).ToList(); var result = new List<List<YourDataType>>(); List<YourDataType> currentPartition = new List<YourDataType>(); foreach (var dateGroup in dateGroups) { // 检查如果把当前日期组加入后,是否超过分片大小限制 if (currentPartition.Count + dateGroup.Count() > partionCountValue && currentPartition.Any()) { // 超过的话,把当前分片加入结果,新建一个分片 result.Add(currentPartition); currentPartition = new List<YourDataType>(); } // 将当前日期组的所有数据加入当前分片 currentPartition.AddRange(dateGroup); } // 别忘了把最后一个分片加入结果 if (currentPartition.Any()) { result.Add(currentPartition); }
代码说明
- 这里的
YourDataType需要替换成你实际的数据类型(比如lstHareket里元素的类型) - 这种方式保证了同一日期的所有数据一定会在同一个分片里,同时尽可能让每个分片的大小接近
partionCountValue - 如果某个日期的数据量本身就超过了
partionCountValue,那这个日期的所有数据会单独占一个分片(毕竟不能拆分同一日期的数据)
如果你的partionCountValue是指分片的数量而不是每个分片的最大数据量,那逻辑需要调整,但从你的原始代码看,应该是指每个分片的最大元素数。如果是分片数量的话,可以再补充说明~
内容的提问来源于stack exchange,提问作者Derya Kendirci
相关产品推荐
相关产品推荐

