如何合并两个DateTime数组并统计各日期在原数组中的出现次数?
合并日期数组并统计各数组中的出现次数
你需要将两个DateTime数组合并为包含所有唯一日期的结构,同时统计每个日期在原数组中的出现次数,以下是具体实现方案:
示例输入
var today = new DateTime(year:2022, month:01, day:01); var firstDateArray = new DateTime[] { today.AddDays(1), today.AddDays(7), today, today.AddDays(3), today }; var secondDateArray = new DateTime[] { today.AddDays(7), today, today.AddDays(3), today.AddDays(3), today.AddDays(1) };
实现步骤
分别统计两个数组的日期频次
使用LINQ的GroupBy对每个数组按日期分组,再转换为字典存储日期和对应出现次数:// 若只需统计日期部分(忽略时间),使用d.Date;若需保留完整DateTime,直接用d var firstDateCounts = firstDateArray .GroupBy(d => d.Date) .ToDictionary(group => group.Key, group => group.Count()); var secondDateCounts = secondDateArray .GroupBy(d => d.Date) .ToDictionary(group => group.Key, group => group.Count());获取所有唯一日期
通过字典键的Union操作,得到两个数组中所有不重复的日期:var allUniqueDates = firstDateCounts.Keys.Union(secondDateCounts.Keys);定义结果结构并生成最终列表
先定义一个类来存储每个日期的统计结果,再遍历所有唯一日期,从两个字典中获取对应次数(不存在则为0):// 结果实体类 public class DateCount { public DateTime Date { get; set; } public int FirstArrayOccurrences { get; set; } public int SecondArrayOccurrences { get; set; } } // 生成结果列表 var finalResult = allUniqueDates.Select(date => new DateCount { Date = date, FirstArrayOccurrences = firstDateCounts.TryGetValue(date, out int count1) ? count1 : 0, SecondArrayOccurrences = secondDateCounts.TryGetValue(date, out int count2) ? count2 : 0 }).ToList();
示例输出
对应你给出的输入,最终结果如下:
| 日期 | 第一个数组出现次数 | 第二个数组出现次数 |
|---|---|---|
| 2022-01-01 | 2 | 1 |
| 2022-01-02 | 1 | 1 |
| 2022-01-04 | 1 | 2 |
| 2022-01-08 | 1 | 1 |
内容的提问来源于stack exchange,提问作者Isaac Ikusika
相关产品推荐
相关产品推荐

