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

如何基于索引对比两个等长List并在GroupBy中获取重复元素的索引

实现方案

你可以通过Select的带索引重载,先把每个值和它对应的原列表索引绑定,再执行分组操作即可,完整代码如下:

private bool CheckIfSameUsersHaveSameServices(List<string> multipleJMBGs, List<BundleSchedule> schedules)
{
    // 先绑定每个JMBG和对应的原列表索引
    var duplicateGroups = multipleJMBGs
        .Select((jmbg, index) => new { jmbg, index })
        .GroupBy(x => x.jmbg)
        .Where(g => g.Count() > 1)
        // 每个分组返回JMBG值和对应的所有索引集合
        .Select(g => new { Jmbg = g.Key, Indexes = g.Select(x => x.index).ToList() })
        .ToList();

    foreach (var group in duplicateGroups)
    {
        // 取出当前重复JMBG对应的所有Schedule的服务ID去重后的数量
        var distinctServiceIdCount = group.Indexes
            .Select(i => schedules[i].ServiceTypeComplexityId)
            .Distinct()
            .Count();
        
        // 校验逻辑可根据你的实际需求调整:
        // 场景1:要求所有重复JMBG对应的服务ID必须相同,只要有一组不满足就返回校验失败
        if (distinctServiceIdCount != 1)
        {
            return false;
        }
        
        // 场景2:只要存在任意一组重复JMBG对应的服务ID相同就返回true,打开下面注释即可
        // if (distinctServiceIdCount == 1)
        // {
        //     return true;
        // }
    }

    // 对应场景1的最终返回:所有重复组都满足要求则返回校验通过
    return true;
}

核心逻辑说明

  • 用到了Select的带索引参数重载:Func<TSource, Int32, TResult>,第二个入参就是元素在原序列中的索引,提前把值和索引绑定为匿名类后再分组,就能直接从分组结果里拿到同一值对应的所有索引
  • 该实现支持单个JMBG出现3次及以上重复的场景,比你原本用字典存两两索引对的方案兼容性更强

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:54:09