【问题标题】:Adding values to LinkedHashMap results in the same value for all keys向 LinkedHashMap 添加值会导致所有键的值相同
【发布时间】:2019-01-09 05:47:22
【问题描述】:

我正在使用 LinkedHashMap 将数组添加到不同的键,如下所示:

nextQ(String qid) {
print(answersList);
print(qid);
setState(() {
  answers[qid] = answersList;
});
print(answers);
_swipeAnimation();
answersList.clear();
}


clicked(String quesid, String id) {
setState(() {
  if (!answersList.contains(id)){
    answersList.add(id);
  }
  qid = quesid;
});
}

第一次调用 nextQ 我得到了:

answersList = [5c2c9b21108d3d04531494a7, 5c2c9b21108d3d04531494a6]

答案 = {5c2c9b21108d3d04531494a4: [5c2c9b21108d3d04531494a7, 5c2c9b21108d3d04531494a6]}

这是正确的。第二次调用我得到:

answersList = [5c2c9b21108d3d04531494a2] .. 这是正确的

答案是:

答案 = {5c2c9b21108d3d04531494a4: [5c2c9b21108d3d04531494a2], 5c2c9b21108d3d04531494a1:[5c2c9b21108d3d04531494a2]}

这是错误的。 为什么地图中所有键都设置了最后一个 answersList 值?

【问题讨论】:

    标签: dart flutter linkedhashmap


    【解决方案1】:

    您每次在地图中设置条目时都使用相同的列表(answersList),因此该列表成为地图中所有值的后备列表。因此,您对 answersList 所做的每项更改都将复制到地图中的所有值。如果您在 answersList.clear(); 之后放置一个打印语句,您可以看到这一点。行,这将打印您的地图,其中 id 指向空列表。

    要解决此问题,您需要为要放入地图中的每个值创建 answersList 的副本:

    answers[qid] = List.from(answersList);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-06
      • 2021-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-10
      • 2021-07-10
      相关资源
      最近更新 更多