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

如何判断Dictionary<string,ComplexType>中是否存在指定Id用户并实现增改

代码修正方案

1. 先修复ComplexType类的笔误

原构造函数内赋值的IdUser和类定义的属性名Id不一致,先做统一:

public class ComplexType
{
    public string Id { get; set; }
    public decimal Duration { get; set; }
    public ComplexType(string id, decimal duration)
    {
        // 原代码此处属性名拼写不匹配,修正为给公开属性Id赋值
        Id = id;
        Duration = duration;
    }
}

2. 调整业务逻辑

核心修改点:

  • 把原有校验字典Key的逻辑,替换为查询字典Values集合中是否存在对应Id的用户
  • 修复原代码中未定义的sc变量问题
  • 匹配到用户直接累加时长,未匹配到则新增字典条目
public void GetUserPerFloor(TotalTimeViewModel model)
{
    var users = getUsers();
    foreach (var user in users)
    {
        // 从字典所有值中查找Id匹配的用户
        var existUser = model.ListUserPerFloor.Values.FirstOrDefault(v => v.Id == user.Id);
        if (existUser == null)
        {
            // 不存在则新增,注意:如果当前用户的楼层已作为Key存在于字典中,会抛出重复Key异常,如有该场景可先判断Key是否存在再做更新
            var sum = user.Duration.GetValueOrDefault(0m);
            model.ListUserPerFloor.Add(user.Floor.ToString(), new ComplexType(user.Id, sum));
        }
        else
        {
            // 存在则累加时长
            var sum = user.Duration.GetValueOrDefault(0m);
            existUser.Duration += sum;
        }
    }
}

可选优化建议

如果你的实际业务是同一楼层下的同个用户需要累加时长,可以把字典结构优化为Dictionary<string, Dictionary<string, ComplexType>>,第一层Key为楼层号,第二层Key为用户Id,无需每次遍历全量Values做匹配,查询和更新效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 01:06:05