Dart 基础语法 - Map

4,929 阅读2分钟

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}