Dart Map类型的相关使用方法
作者:细嗅v蔷薇 来源:blog.pushstack.com 更新时间:2023-05-25 21:55
这里总结了 Dart 中一些常用的对象(Map)操作方法,以便查阅。
addAll()
用于 Map 合并,把新的键值对合并到当前 Map,如果 key 已存在,则会做覆盖处理。
Map user = { 'name': 'Tom', 'age': 20 }; user.addAll({ 'age': '18', 'job': 'engineer' }); print(user); // {name: Tom, age: 18, job: engineer} |
containsKey(), containsValue()
containsKey()
判断一个 Map 是否包含某个 keycontainsValue()
判断一个 Map 是否包含某个 value
Map user = { 'name': 'Tom', 'age': 20 }; print(user.containsKey('name')); // true print(user.containsValue('Tom')); print(user.containsValue('Jack')); // true // false |
forEach()
遍历一个 Map
Map user = { 'name': 'Tom', 'age': 20 }; user.forEach((key, value) => print('key: $key, value:$value')); // key: name, value:Tom // key: age, value:20 |
putifAbsent()
向一个 Map 中添加不存在的键值对,如果 key 已经存在,则原 Map 不变。
Map user = { 'name': 'Tom', 'age': 20 }; user.putIfAbsent('job', () => 'engineer'); print(user); // {name: Tom, age: 20, job: engineer} |
remove(), removeWhere()
remove()
接收一个 key 作为参数,从 Map 中删除对应的键值对removeWhere()
接收一个 function 作为参数,从 Map 中删除符合条件的键值对
Map user = { 'name': 'Tom', 'age': 20, 'job': 'engineer' }; user.remove('job'); print(user); // {name: Tom, age: 20} // 删除 key == 'age' 的项目 user.removeWhere((key, value) => key == 'age'); print(user); // {name: Tom} // 删除 value == 'Tom' 的项目 user.removeWhere((key, value) => value == 'Tom'); print(user); // {} |
clear()
清空一个 Map
Map user = { 'name': 'Tom', 'age': 20 }; user.clear(); print(user); // {} |
update()
提供一个 key, 更新 Map 中跟 key 对应的 value。
Map user = { 'name': 'Tom', 'age': 20 }; user.update('age', (dynamic val) => ++val); print(user); // {name: Tom, age: 21} // 实际上可以通过赋值的这种方式直接处理 user['age'] = 26; print(user); // {name: Tom, age: 26} |
Map.from()
克隆一个 Map,通过 Map.from()
仅仅能够实现浅克隆。
Map user = { 'name': 'Tom', 'age': 20, 'like': ['basketball', 'football'] }; Map userCopy = Map.from(user); print(userCopy); // {name: Tom, age: 20, like: [basketball, football]} // 这个仅仅是浅克隆,引用类型会同步修改 userCopy['like'].add('swimming'); print(user); // {name: Tom, age: 20, like: [basketball, football, swimming]} print(userCopy); // {name: Tom, age: 20, like: [basketball, football, swimming]} |
对于深克隆,我们可以简单的这样去处理:
import 'dart:convert'; // ... Map clonedUser = json.decode(json.encode(user)); |
isEmpty
这个是 Map 的一个属性,可以判断一个 Map 是否为空
Map user = { 'name': 'Tom', 'age': 20 }; Map user2 = {}; print(user.isEmpty); // false print(user2.isEmpty); // true |