Flutter Dart中的集合浅拷贝和深拷贝

浅拷贝和深拷贝

    • List
      • List初始化
      • List取元素
    • List 的浅拷贝
    • List 的深拷贝
      • 场景
      • 实现
      • 后续

List

List初始化

Dart语法中的array就是list ,list集合(也称为数组)所以没有Android中对应的array和list,也就没有对应的**toList()toArray()**这个两个函数。

list初始化 
var list =[];  
List list  =[];

List取元素

list[0] 这种用角标来取元素的写法

List 的浅拷贝

Dart list的源码中对集合copy等操作都是属于浅拷贝

///List.from
external factory List.from(Iterable elements, {bool growable: true});

///List.of
 factory List.of(Iterable elements, {bool growable: true}) =>
      new List.from(elements, growable: growable);

///List.generate
 factory List.generate(int length, E generator(int index),
      {bool growable: true}) {
    List result;
    if (growable) {
      result = []..length = length;
    } else {
      result = new List(length);
    }
    for (int i = 0; i < length; i++) {
      result[i] = generator(i);
    }
    return result;
  }

///list.addAll
等等

List 的深拷贝

场景

当我们需要对数据进行修改等操作,但是是不改变源数据。

实现

答案是 我目前没有找到List深拷贝的情况
但是我们又最笨的办法
对于数据的处理里面是对象就new 新开辟内存来循环赋值

伪代码
 ///深拷贝
  List _getList() {
    List copyList = [];
    for (var item in widget.betContests) {
      BetContests betContests = new BetContests(
          item.leagueName,
          item.gameResult,
          _getBetItemsList(item.betItems),
          item.dgpItems);
      copyList.add(betContests);
    }
    return copyList;
  }

  List _getBetItemsList(List list) {
    List copyList = [];
    for (var item in list) {
      BetItems betItems = new BetItems(
          item.gameTypeId, item.ggType,);
      copyList.add(betItems);
    }
    return copyList;
  }

后续

后续有新的发现如何处理会更新,另外有知道的大佬欢迎留言告知,感激不尽。一起学习进步!

你可能感兴趣的:(Flutter,Flutter,采坑记录)