为何C#中无法按每日2条记录填充列表至指定日期范围?
解决按日期每天生成2条记录的问题
咱先唠唠你这段代码为啥达不到预期哈:
- 内层的
for循环会一次性把原List里的所有元素都塞进List2,导致sameDayCount直接跳到原列表的长度,远大于2,内层的do-while循环跑一次就结束了,完全没法实现“每天2条”的需求 - 循环嵌套的逻辑没理清楚,把遍历原列表和控制每日记录数的逻辑混在一起了,越绕越乱
下面给你两种常见场景的修正代码,你可以根据自己的需求选:
场景1:循环复用原列表元素,每天生成2条
如果原列表的元素可以循环使用(比如列表只有1个元素,每天就生成2条相同的;列表有3个元素,第一天取第0、1个,第二天取第2、0个,以此类推),用这段代码:
// 起始日期取Date部分,避免时分秒的干扰 DateTimeOffset startDate = DateTimeOffset.Now.Date; int totalDays = 30; int recordsPerDay = 2; for (int dayOffset = 0; dayOffset < totalDays; dayOffset++) { DateTimeOffset currentDate = startDate.AddDays(dayOffset); // 为当前日期生成2条记录 for (int i = 0; i < recordsPerDay; i++) { // 用取模运算循环获取原列表的元素 int sourceIndex = i % List.Count; Client client = new Client(); client.Name = List[sourceIndex].Name; client.Date = currentDate; List2.Add(client); } }
场景2:每天固定取原列表的前2条(不足则补充)
如果要求每天必须生成2条,原列表有多少取多少,不够的话重复最后一条补充,用这段:
DateTimeOffset startDate = DateTimeOffset.Now.Date; int totalDays = 30; int recordsPerDay = 2; for (int dayOffset = 0; dayOffset < totalDays; dayOffset++) { DateTimeOffset currentDate = startDate.AddDays(dayOffset); // 先取原列表的前N条(N是原列表长度和2的较小值) for (int i = 0; i < Math.Min(recordsPerDay, List.Count); i++) { Client client = new Client(); client.Name = List[i].Name; client.Date = currentDate; List2.Add(client); } // 如果还不够2条,用最后一条补充 while (List2.Count % recordsPerDay != 0) { Client client = new Client(); client.Name = List.Last().Name; client.Date = currentDate; List2.Add(client); } }
这两段代码的逻辑都很清晰:外层循环管日期,内层循环管当天的记录数,把日期和记录数的逻辑分开,就不会乱啦~
内容的提问来源于stack exchange,提问作者positive perspective
相关产品推荐
相关产品推荐

