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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hao_m582/article/details/84103687

List

List初始化

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

list初始化 
var list =[];  
List<dynamic> 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<E> elements, {bool growable: true}) =>
      new List<E>.from(elements, growable: growable);

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

///list.addAll
等等

List 的深拷贝

场景

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

实现

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

伪代码
 ///深拷贝
  List<BetContests> _getList() {
    List<BetContests> 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<BetItems> _getBetItemsList(List<BetItems> list) {
    List<BetItems> copyList = [];
    for (var item in list) {
      BetItems betItems = new BetItems(
          item.gameTypeId, item.ggType,);
      copyList.add(betItems);
    }
    return copyList;
  }

后续

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

猜你喜欢

转载自blog.csdn.net/hao_m582/article/details/84103687