Dart(五)Map的屬性和方法實例
聲明
不指定泛型
var map1 = {'aa':'aaa','bb':22,'cc':true};//直接賦初始值 //print(map1);//{aa: aaa, bb: 22, cc: true} Map map3 = {"a":"a1","b":"b1"};//直接賦初始值 //print(map3);//{a: a1, b: b1} map3["c"] ="c"; //print(map3);//{a: a1, b: b1, c: c} var map2 = new Map(); map2['dd']=3.3; map2[2] = 'ddd22'; // print(map2);//{dd: 3.3, 2: ddd22} // print(map2[3]);//null 如果不存在,則是null map2[3]= null;//key存在 value存在 value的值為null // print(map2.length);//3 長度
指定泛型
var map333 = <String,String>{}; Map<int,String> map4 = new Map(); map4[1]="a"; map4[2] = "b"; // print(map4);//{1: a, 2: b} Map<String,int> map5 = {"a":1,"b":2}; // print(map5);//{a: 1, b: 2}
屬性
Map<String,int> map6 = {"a":1,"b":2}; // print(map6.length);//2 長度 // print(map6.isNotEmpty);//true 是否不為空 // print(map6.isEmpty);//false 是否為空 // print(map6.keys);//(a, b) key的集合 // print(map6.values);//(1, 2) value的集合 // print(map6.entries);//(MapEntry(a: 1), MapEntry(b: 2)) map迭代的鍵值對集合
方法
新增一個key-value
Map<String,int> map7 = {"a":1,"b":2,"c":3,"d":4,"e":5}; //新增一個key value map7["f"] = 6;//新增一個不存在的key // print(map7);//{a: 1, b: 2, c: 3, d: 4, e: 5, f: 6}
修改一個key的value
Map<String,int> map8 = {"a":1,"b":2,"c":3,"d":4,"e":5}; map8["a"] = 11; //print(map8);//{a: 11, b: 2, c: 3, d: 4, e: 5}
update() 對指定的key的value做出修改
Map<String,int> map23 = {"a":1,"b":2,"c":3}; int result3 = map23.update("a", (value)=>(value*2));//key存在 根據參數函數修改其值 // print(result3);//2 // print(map23);//{a: 2, b: 2, c: 3} // int result4 = map23.update("d", (value)=>(value*2));//key不存在 報錯 int result4 = map23.update("d", (value)=>(value*2),ifAbsent: ()=>(10));//key不存在 但有ifAbsent參數 返回ifAbsent函數的值 並添加到map中 // print(result4);//10 // print(map23);//{a: 2, b: 2, c: 3, d: 10}
updateAll() 根據參數函數的規則,批量修改map
Map<String,int> map24 = {"a":1,"b":2,"c":3}; map24.updateAll((String key,int value){ return value*2; });// // print(map24);//{a: 2, b: 4, c: 6}
Map<String,int> map25 = {"a":1,"b":2,"c":3}; map25.updateAll((String key,int value){ if(key=="a"){return 10;} if(key=="b"){return 20;} return value*2; });// // print(map25);//{a: 10, b: 20, c: 6}
remove() 刪除一個key
Map<String,int> map9 = {"a":1,"b":2,"c":3,"d":4,"e":5}; map9.remove("b"); //print(map9);//{a: 11, c: 3, d: 4, e: 5}
removeWhere() 根據條件批量刪除
Map<String,int> map10 = {"a":1,"b":2,"c":3,"d":4,"e":5}; map10.removeWhere((key,value)=>(value>3));//刪除掉 符合參數函數的keyvalue對 //print(map10);//{a: 1, b: 2, c: 3}
containsKey() 是否包含key
Map<String,int> map11 = {"a":1,"b":2,"c":3,"d":4,"e":5};
// print(map11.containsKey("a"));//true 是否包含key
// print(map11.containsKey("aa"));//false 是否包含key
containsValue() 是否包含value值
Map<String,int> map17 = {"a":1,"b":2,"c":3}; // print(map17.containsValue(1));//true // print(map17.containsValue(4));//false
forEach() 遍歷
Map<String,int> map12 = {"a":1,"b":2,"c":3,"d":4,"e":5}; map12.forEach((String key,int value){ // print("$key $value"); // a 1 // b 2 // c 3 // d 4 // e 5 });
//遍歷時修改value值 Map<String,int> map13 = {"a":1,"b":2,"c":3}; map13.forEach((String key,int value){ // print("$key $value"); map13["c"] = 4; // a 1 // b 2 // c 4 });
//遍歷時,新增或刪除key 都會報錯 Map<String,int> map14 = {"a":1,"b":2,"c":3}; map14.forEach((String key,int value){ // print("$key $value"); // map14["d"] = 4;// 報錯 // map14.remove("a");// 報錯 });
map() 遍歷每個元素 根據參數函數,對keyvalue做出修改,可轉換成其他泛型的Map
Map<String,int> map19 = {"a":1,"b":2,"c":3}; Map<int,String> map20 = map19.map((String key,int value){ return new MapEntry(value, key); }); // print(map20);//{1: a, 2: b, 3: c}
clear() 清空map
Map<String,int> map15 = {"a":1,"b":2,"c":3}; map15.clear(); // print(map15);//{}
addAll() 整體合並另一個map 泛型要一致
Map<String,int> map16 = {"a":1,"b":2,"c":3}; Map<String,int> other = {"a":1,"c":4,"d":7}; map16.addAll(other);//key相同時value值后者覆蓋前者,前者不存在時則添加進來 // print(map16);//{a: 1, b: 2, c: 4, d: 7}
addEntries() 合並兩個map 如果key有重復,被合並的map的value覆蓋前者
Map<String,int> map26 = {"a":1,"b":2,"c":3}; Map<String,int> map27 = {"a":1,"b":4,"d":3,"e":5}; map26.addEntries(map27.entries); // print(map26);//{a: 1, b: 4, c: 3, d: 3, e: 5}
putIfAbsent() 存在key就獲取值,不存在則添加到map 然后返回值
Map<String,int> map18 = {"a":1,"b":2,"c":3}; int result = map18.putIfAbsent("a", ()=>(2));//存在 // print(result);//1 獲取key的值 // print(map18);//{a: 1, b: 2, c: 3} map不變 int result2 = map18.putIfAbsent("d", ()=>(2));//不存在 // print(result2);//2 獲取新的key的value // print(map18);//{a: 1, b: 2, c: 3, d: 2} map改變
cast() 泛型類型提升為其父祖類
Map<String,int> map21 = {"a":1,"b":2,"c":3}; Map<Object,Object> map22 = map21.cast(); map22["d"]=33;
