5、Map
在Dart中,Map是以key-value形式存储,键和值都可以是任何类型的对象,每个键只能出现一次
1、声明
- 1、通过直接声明的方式创建一个Map
Map game = {"game":"Switch","company":"任天堂"};
- 2、创建一个不可变的Map,需要在Map前面加一个const
Map game = const{"game":"Switch","company":"任天堂"};
- 3、构造方式声明
Map game = new Map();
game['name'] = '任天堂';
2、属性
print(citys.length); //长度
print(citys.isEmpty); //是否为空
print(citys.isNotEmpty); //是否不为空
print(citys.keys);// key的集合
print(citys.values);//value的集合
//(MapEntry(cityname: 北京), MapEntry(cityid: 10001), MapEntry(1: 1))
print(citys.entries);// map迭代的键值对集合
3、方法
citys.update('1', (value)=>(value+'23')); //存在的值可以直接修改,不存在的值就直接报错
print(citys);
//key不存在,因为用ifAbsent参数, 返回ifAbsent函数的值,并添加到map中
citys.update('2', (value)=>(value+'34'), ifAbsent: ()=>('123'));
print(citys);
//updateAll根据参数函数的规则,批量修改app
Map<String,int> map1 = {'a':1,"b":2,"c":3}; //指定泛型初始化map
map1.updateAll((k,v){
return v*2;
});
print(map1);
map1.updateAll((k,v){
if(k=='a'){return 100;}
if(k=='b'){return 200;}
return v*10;
});
print(map1);
//删除一个key remove
map1.remove('a');
print(map1);
//根据条件批量删除
Map<String,int> map10 = {"a":1,"b":2,"c":3,"d":4,"e":5};
map10.removeWhere((k,v)=>(v>3)); //删掉符号参数函数keyvalue对
print(map10); //{a: 1, b: 2, c: 3}
//是否包含
map10.containsKey('a'); //是否包含key
map10.containsValue(1); //是否包含value
4、遍历
names.forEach((k,v){ //forEach 遍历
print('遍历 $k , $v');
});
names.map((k,v){ //map方法放回一个新的数组
return MapEntry(v, k);
});
print('map: $names');
5、清空
//清空map
names.clear();
print('names $names');
6、添加addall
Map<String,int> map11 = {'a':1,'b':2,'c':3};
Map<String,int> map12 = {'d':3,'e':5,'f':5,'c':10};
//addAll 整体合并另一个map,泛型要一致 key相同时value值后者覆盖前者.前者不存在就添加进来
map11.addAll(map12);
print(map11);
//addEntries 合并两个map,如果key有重复,并合并的map的value覆盖前者
map11.addEntries(map12.entries);
print(map11);
//putlfAbsent() 存在就获取值,不存在则添加到map,然后返回值
int result= map12.putIfAbsent('c', ()=>(100)); //存在
print(result); //10
int result2 = map12.putIfAbsent('t', ()=>1000); //不存在
print(result2);
print(map12); //map中也会跟着添加进去
7、cast 泛型类型提升为其父祖类
//cast() 泛型类型提升为其父祖类
Map<String,int> map21 = {"a":1,"b":2,"c":3};
Map<Object,Object> map22 = map21.cast();
map22["d"]=33;
// print(map22);//{a: 1, b: 2, c: 3, d: 33}