【问题标题】:Why does clearing a list clear the first? [duplicate]为什么清除列表会清除第一个? [复制]
【发布时间】:2021-12-09 11:38:16
【问题描述】:

我编写了这个小例子,以便您了解我的问题。我制作了一份列表的副本,并从副本中删除了值,但它们也从原始列表中删除了。为什么会这样?

错误是:未捕获错误:迭代期间并发修改:'JSArray'的实例。

void main() 
{
  List<String> list1 = ['jose', 'maria', 'eduardo','emiliano','paula'];
  List<String> list2 = [];
  
  
  list2 = list1;
  for(var name in list1)
  {
    String nameAux = name;
    print(nameAux);
    list2.removeLast();
  }
}

我需要原始列表不要删除副本之类的元素

谢谢

【问题讨论】:

  • 不,您没有复制您的列表,因为list2 = list1 只是创建了对同一个列表的附加引用。如果您希望它们独立,则必须克隆列表。

标签: list flutter dart dart-null-safety


【解决方案1】:

这里有几件事:

首先,下面只复制对列表的引用,而不是列表本身

list2 = list1;

相反,您可以使用它

List<String> list2 = List.from(list1);

更多详情请看post

然后,您遇到另一个错误,您无法在迭代列表时从列表中删除项目

  for(var name in list1)
  {
    list2.removeLast();
  }

如果您确实需要这样做,请改用它,但当您删除一个项目时要小心,下一个项目将被移动:

for(var i = 0; i < this.gamesList.length; i++)

【讨论】:

  • 请不要回答已经被多次询问和回答的问题,而是将其标记为重复...尤其不要创建参考其他帖子的答案
  • 标题另有说明,问题也有。异常是不克隆列表而只是创建附加引用的直接结果...因为如果您查看代码,则操作正在迭代 list1 但从 list2 中删除,如果两者都不是问题列表是不同的对象,而不是对同一个列表的引用
  • 这是他在他的问题“错误是:未捕获的错误:迭代期间的并发修改”中列出的错误消息。无论如何,感谢您的评论,我一定会在以后的帖子中使用您的想法。赞赏 ;0)
  • 是的,正如我在评论中解释的那样,这是不克隆列表的直接结果。
  • 是的,你可能是新手,还不能投最后一票,但这并不意味着你应该违反社区规则
猜你喜欢
  • 2022-01-05
  • 2018-07-25
  • 1970-01-01
  • 2016-12-04
  • 2016-11-04
  • 1970-01-01
  • 1970-01-01
  • 2014-07-18
  • 2017-02-14
相关资源
最近更新 更多