Flutter Dart中的集合淺拷貝和深拷貝

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;
  }

後續

後續有新的發現如何處理會更新,另外有知道的大佬歡迎留言告知,感激不盡。一起學習進步!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章