美文网首页Flutter
Flutter List数组深拷贝

Flutter List数组深拷贝

作者: 倪大头 | 来源:发表于2020-12-21 14:51 被阅读0次

Dart中的数组直接赋值,修改新数组时会导致原数组的内容也一起被修改。
比如:

List list = ['1', '2', '3', '4', '5'];
List copyList = list;
copyList[0] = 'abc';
print(list);
print(copyList);

打印结果如下:


image.png

现在把直接赋值改为List.from方法:

List list = ['1', '2', '3', '4', '5'];
List copyList = List.from(list);
copyList[0] = 'abc';
print(list);
print(copyList);

打印结果如下:


image.png

如果数组里的元素是int或者String,用List.from是没问题的。
现在把原数组的元素换为Map类型:

List list = [{'tag': '1'}, {'tag': '2'}, {'tag': '3'}, {'tag': '4'}, {'tag': '5'}];
List copyList = List.from(list);
copyList[0]['tag'] = 'abc';
print(list);
print(copyList);

打印结果如下:


image.png

原数组又被改了,我的解决方法:

List list = [{'tag': '1'}, {'tag': '2'}, {'tag': '3'}, {'tag': '4'}, {'tag': '5'}];
List copyList = copyWithList(list);
copyList[0]['tag'] = 'abc';
print(list);
print(copyList);

// 数组拷贝
List copyWithList(List list) {
  List copyList = [];
  for (var item in nullToList(list)) {
    if (item is Map) {
      copyList.add(Map.from(item));
    } else if (item is List) {
      copyList.add(copyWithList(item));
    } else {
      copyList.add(item);
    }
  }
  return copyList;
}

遍历原数组,拷贝每一个元素,如果元素是Map类型则使用Map.from(item),List类型则再次调用copyWithList(item)遍历每一个元素,完成套娃。

相关文章

  • Flutter List数组深拷贝

    Dart中的数组直接赋值,修改新数组时会导致原数组的内容也一起被修改。比如: 打印结果如下: 现在把直接赋值改为L...

  • 关于几个拷贝的问题

    数组浅拷贝 数组深拷贝 复合数组深拷贝

  • Flutter List 的深拷贝问题

    List中存储的只是 int String 等类型, 可以使用List.from重新生成一个新的List List...

  • java List复制:浅拷贝与深拷贝

    List浅拷贝 众所周知,list本质上是数组,而数组的是以地址的形式进行存储。如上图将list A浅拷贝给lis...

  • Python copy

    浅拷贝copy.copy() 深拷贝copy.deepcopy() List Slicing [:]和List转换...

  • javascript 杂记

    数组杂记 1)数组的判断,使用Array.isArray() 2)一维数组的深拷贝 3)多维数组的深拷贝 4)数组...

  • Javascript深拷贝

    什么是深拷贝 创建一个新的对象或数组时,将原对象/数组的“值”拷贝,而不是“引用”。 深拷贝 数组拷贝不存在多层嵌...

  • 2.深拷贝和浅拷贝

    目录1.浅拷贝2.深拷贝 1.浅拷贝 1.1 "="拷贝 list_dest = list_src完全同步,引用指...

  • OC 数组mutableCopy能不能把数组里边的对象深拷贝?

    一. 数组深拷贝,数组中对象不实现NSCopying协议 Person类 使用 结果: 从结果来看虽然数组是深拷贝...

  • 关于OC中数组的深、浅拷贝的小总结

    简而言之:数组的深拷贝,仅仅只是拷贝数组的内容,数组内元素的地址不会变,如果想要数组内的对象元素也深拷贝,则数组内...

网友评论

    本文标题:Flutter List数组深拷贝

    本文链接:https://www.haomeiwen.com/subject/ikmrnktx.html