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

如何验证日期列表中每年所有月份完整性及处理重复数据

问题与解决方案

已知代码

给定的C#实体类:

public class DateGenerator
{
    public DateOnly GeneratedDate {get; set;}
}

待处理的数据列表:

List<DateGenerator> dateGenerators;

需求说明

  • 验证列表中每一年是否包含1-12月的全部月份
  • 识别同一年的重复数据组(比如同一年存在多组独立的日期集合),并检查每组是否都覆盖全年12个月份
  • 示例场景:2009年缺前6个月 → 验证不通过;2011年有两组数据,其中第二组不全 → 验证不通过

实现方案

以下是VerifyCompleteMonthlySet方法的具体实现,通过分组统计来处理重复数据组的检查:

public bool VerifyCompleteMonthlySet(List<DateGenerator> dateGenerators)
{
    // 空列表直接返回false(若业务认为空列表合法,可改为true)
    if (dateGenerators == null || !dateGenerators.Any())
        return false;

    // 按年份分组,逐个处理每一年的数据
    var yearGroups = dateGenerators.GroupBy(dg => dg.GeneratedDate.Year);

    foreach (var yearGroup in yearGroups)
    {
        int currentYear = yearGroup.Key;
        var allDatesInYear = yearGroup.Select(dg => dg.GeneratedDate).ToList();

        // 统计每个月份的出现次数,次数代表该年的数据组数
        var monthOccurrenceCount = allDatesInYear
            .GroupBy(date => date.Month)
            .ToDictionary(group => group.Key, group => group.Count());

        // 获取该年最多有几组数据
        int maxGroupCount = monthOccurrenceCount.Values.Max();

        // 检查每一组数据是否都覆盖12个月份
        for (int groupNum = 0; groupNum < maxGroupCount; groupNum++)
        {
            // 提取当前组包含的所有月份(每个月份取第groupNum次出现的记录)
            var currentGroupMonths = monthOccurrenceCount
                .Where(kv => kv.Value > groupNum)
                .Select(kv => kv.Key)
                .ToList();

            // 验证当前组是否包含1-12月全部月份
            if (!Enumerable.Range(1, 12).All(month => currentGroupMonths.Contains(month)))
            {
                Console.WriteLine($"年份 {currentYear} 的第 {groupNum + 1} 组数据缺失月份");
                return false;
            }
        }
    }

    // 所有年份的所有组都符合要求
    return true;
}

逻辑说明

  1. 年份分组:先将所有日期按年份归类,确保逐个处理每一年的数据
  2. 重复组识别:通过统计每个月份的出现次数,判断该年是否存在多组数据(次数大于1则说明有多组)
  3. 组内验证:对每一组数据,提取对应组的月份集合,检查是否覆盖1-12月的全部月份
  4. 边界处理:空列表直接返回验证不通过,可根据实际业务需求调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 19:31:12