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

Dart 向已声明空Map新增/更新指定ques_id对应K,V键值对问题咨询

代码修改方案

问题根源

你原来的实现存在两个核心错误:

  • 数据结构设计不合理:你直接将单道题的三个属性存到optionSelection根Map中,无法存储多道题的答案,新增题目会覆盖已有题的数据。
  • 逻辑判断完全颠倒:用containsValue判断存在性效率极低,且存在时调用putIfAbsent的逻辑完全不符合需求。

推荐实现(支持存储多道题答案)

首先调整Map的定义,以questionId作为根Map的键,方便O(1)时间复杂度判断题目是否存在:

// 强类型声明更规范,也可以用你原来的动态类型写法
Map<int, Map<String, dynamic>> optionSelection = {};

点击按钮时的处理逻辑:

// 直接判断questionId是否是根Map的键即可
if (optionSelection.containsKey(questionId)) {
  // 题目已存在,仅更新用户答案
  optionSelection[questionId]!['user_ans_id'] = selectedOption;
  // 如果需要同步更新quiz_id可补充下面一行
  // optionSelection[questionId]!['quiz_id'] = selectedOption;
} else {
  // 题目不存在,新增整组数据
  optionSelection[questionId] = {
    "quiz_id": selectedOption,
    "ques_id": questionId,
    "user_ans_id": selectedOption,
  };
}

兼容原有结构的修改(仅支持存储单道题答案)

如果你坚持要用原来的根Map直接存单个题属性的结构,可按如下修改:

final quesExist = optionSelection['ques_id'] == questionId;
if (quesExist) {
  optionSelection['user_ans_id'] = selectedOption;
} else {
  optionSelection.addAll({
    "quiz_id": selectedOption,
    "ques_id": questionId,
    "user_ans_id": selectedOption,
  });
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 04:24:03