題記
—— 執劍天涯,從你的點滴積累開始,所及之處,必精益求精,即是折騰每一天。
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中對應的值
}
完畢