Dart 数据类型 - Map

Map 是一个无序的键值对(key-value)映射,通常被称为哈希或字典。

声明方式
(1)、字面量
       var map = { key1: value1, key2: value2 };
(2)、构造函数
       var map = new Map();
       map['key'] = value;
  // 声明 - 字面量
  var person = {'name': 'bob', 'age': 20};
  print(person); // {name: bob, age: 20}

  // 声明 - 构造函数
  var p = new Map();
  p['name'] = 'kobe';
  p['age'] = 42;
  print(p); // {name: kobe, age: 42}

 

属性
(1)、map[key]:访问属性
(2)、length → int :返回键值对的数量
(3)、keys → Iterable<K> :返回一个只包含键名的可迭代对象
(4)、values → Iterable<V> :返回一个只包含键值的可迭代对象
(5)、isEmpty → bool :检测map是否为空
  // 访问属性
  print(person['name']); // bob
  // 返回键值对的数量
  print(person.length); // 2
  // 返回一个只包含键名的可迭代对象
  print(person.keys); // (name, age)
  // 返回一个只包含键值的可迭代对象
  print(person.values); // (bob, 20)
  // 检测map是否为空
  bool isEmpty = person.isEmpty;
  print(isEmpty); // false

 

方法
(1)、addAll(Map<K, V> other) → void :添加一个map
(2)、containsKey(Object? key) → bool :判断map中的key是否存在
(3)、putIfAbsent(K key, V ifAbsent()) → V :如果key存在,就不赋值;如果key不存在,就赋值
(4)、remove(Object? key) → V? :删除指定的键值对
(5)、removeWhere(bool test(K key, V value)) → void :根据条件进行删除
(6)、clear() → void :清空map
  // addAll()
  person.addAll({'city': 'beijing', 'country': 'china'});
  print(person); // {name: bob, age: 20, city: beijing, country: china}

  // containsKey()
  bool hasCity = person.containsKey('city');
  print(hasCity); // true

  // putIfAbsent()
  person.putIfAbsent('city', () => 'hangzhou');
  print(person); // {name: bob, age: 20, city: beijing, country: china}
  person.putIfAbsent('gender', () => 'male');
  print(
      person); // {name: bob, age: 20, city: beijing, country: china, gender: male}

  // remove()
  final removedValue = person.remove('country');
  print(removedValue); // china
  print(person); // {name: bob, age: 20, city: beijing, gender: male}

  // removeWhere()
  person.removeWhere((key, value) => key == 'gender');
  print(person); // {name: bob, age: 20, city: beijing}

  // clear()
  person.clear();
  print(person); // {}

 

遍历
(1)、forEach(void action(K key, V value)) → void
(2)、map<K2, V2>(MapEntry<K2, V2> convert(K key, V value)) → Map<K2, V2>
  // forEach()
  final score = {'chinese': 145, 'math': 138, 'english': 142};
  score.forEach((key, value) {
    print('$key, $value');
  });

  // map() 给每一科成绩都加5分
  final newScore = score.map((key, value) => new MapEntry(key, value + 5));
  print(newScore); // {chinese: 150, math: 143, english: 147}

 

 
posted @ 2022-04-21 10:03  rogerwu  阅读(444)  评论(0编辑  收藏  举报