開發與維運

Dart語言基礎Map、List、Set操作合輯

題記
—— 執劍天涯,從你的點滴積累開始,所及之處,必精益求精,即是折騰每一天。
Dart語言基礎Map、List、Set操作合輯@凡科快圖.png

Header1 Header2
CSDN 網易雲課堂教程
掘金 EDU學院教程
知乎 Flutter系列文章

Flutter完全採用了Dart語言,所以分析Dart語言基礎相當於是學習了Flutter語言基礎、
在Dart中,Map用來存儲對像類型的數據,List與Set用來存儲數組類型的數據。

本文是來描述 Map 、List 、Set中數據的添加 、修改、循環遍歷查詢的。


1 Dart中的Map

Map用來保存key-value鍵值對的數據集合, 與Object-C中所說的字典一至,分為無序的HashMap、key的插入順序的LinkedHashMap、按key的排序順序的SplayTreeMap,Map的創建實例如下:

// 創建一個Map實例,默認實現是LinkedHashMap。
Map()

// 創建一個LinkedHashMap實例,包含other中的所有鍵值對。
Map.from(Map other)

// 創建一個Map實例,其中Key和Value由iterable的元素計算得到。
Map.fromIterable(Iterable iterable, {K key(element), V value(element)})

 // 將指定的keys和values關聯,創建一個Map實例。
Map.fromIterables(Iterable<K> keys, Iterable<V> values)

 // 使用默認實現LinkedHashMap創建一個嚴格的Map。
Map.identity()

 // 創建一個不可修改、基於哈希值的Map,包含other所有的項
Map.unmodifiable(Map other)

然後在實際項目中結合數據創建Map實例,創建一個空的Map代碼如下:

// 創建一個Map實例, 插入順序進行排列 默認無數據
  var dic = new Map();
  print(dic);  // {}
  // 創建一個空的Map, Map允許null作為key
  var dic5 = new Map.identity();
  print(dic5);  //{}

創建有一個有初始值的Map,代碼如下:

  // 根據一個Map創建一個新的Map, 插入順序進行排列
  var dic1 = new Map.from({'name': '張三'});
  print(dic1);  // {name: 張三}
 
  // 根據List創建Map, 插入順序進行排列
  List<int> list = [1, 2, 3];
  // 使用默認方式, key和value都是數組對應的元素
  var dic2 = new Map.fromIterable(list);
  print(dic2);  // {1: 1, 2: 2, 3: 3}


  // 設置key和value的值
  var dic3 = new Map.fromIterable(list, key: (item) => item.toString(), value: (item) => item * item);
  print(dic3);  // {1: 1, 2: 4, 3: 9}

  // 創建一個不可修改、基於哈希值的Map
  var dic6 = new Map.unmodifiable({'name': 張三});
  print(dic6); // {name: 張三}

根據List數據來創建Map,代碼如下:

  // 兩個數組映射一個字典, 插入順序進行排列
  List<String> keys = ['name', 'age'];
  var values = [張三, 20];
  // 如果有相同的key值, 後面的值會覆蓋前面的值
  var dic4 = new Map.fromIterables(keys, values);
  print(dic4);  // {name: 張三, age: 20}

對於Map來講,初始化創建時可以賦值也可以是空的,當創建的可變的Map數據集合時,在實際開發中往往會根據不同的操作來修改不同的數據,如下:

  // 根據一個Map創建一個新的Map, 插入順序進行排列
  // 在這裡通過泛型指定 了 Map中的key的類型為 String類型 value是動態的
  Map<String, dynamic> dic1 = new Map.from({'name': '張三'});
  print(dic1);  // {name: 張三}

  //修改name的值 
  dic1['name'] = '李四';
  //向Map中添加新的鍵值對數據
  dic1['age'] = 23;

然後獲取Map中的數據如下操作;

//根據key獲取對應的值 
String name = dic1= dic1['name'];

///遍歷獲取Map中所有的數據
dic1.forEach((key, value) {
  print("${key} is ${value}");
});

2 Dart中的List

對於List與Set來講,都是用來存儲數組類型數據,區別是Set不可保存重複數據,也就是說Set中的數據具有唯一性,在這裡只分析List,Set與List的使用方法一至,使用代碼如下:

// 創建非固定長度的Lsit
var testList = List();
// 也可以 List testList = List();
print(testList.length); // 0
// 創建固定長度的List
var fixedList = List(4);
print(testList.length); // 4
 
 ///向Lsit中添加數據
testList.add("hello");
testList.add(123);
 
 
// 創建元素類型固定的List
var typeList = List<String>(); // 只能添加字符串類型的元素
 
typeList.add("張三"); // 正確
typeList.add(1); // 錯誤。類型不正確
 
// 直接賦值 創建List
var numList = [1, 2, 3];

然後獲取List中的數據需要通過索引來獲取,List中保存的數據索引從0開始計數,代碼如下:

///方式一 遍歷獲取List中的所有數據
testList.forEach((value) {
  //value 就是List中對應的值
});

///方式二 遍歷獲取List中的所有的數據
for(int i=0;i<testList.length;i++){
  ///根據索引獲取List中的數據
  var value = testList[i];
}

//方式三
//while+iterator迭代器遍歷,類似Java中的iteator       
while(testList.iterator.moveNext()) {
  //獲取對應的值
  var value = testList.iterator.current;
  
}

//方式四 增強for循環
//for-in遍歷       
for (var value in testList) {
  //value 就是List中對應的值
}

完畢
公眾號 我的大前端生涯

Leave a Reply

Your email address will not be published. Required fields are marked *