天天看點

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

題記

—— 執劍天涯,從你的點滴積累開始,所及之處,必精益求精,即是折騰每一天。

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

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中對應的值
}
           

完畢

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