跳到主要内容

Dart Map类型的相关使用方法

细

细嗅v蔷薇

https://blog.pushstack.com/dart-map-utility-methods.html

2020年10月21日 5,270 次阅读
本页目录

这里总结了 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 是否包含某个 key
  • containsValue() 判断一个 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
 

Related

相关文章

同分类文章 →
2026年07月28日 flutter

Dart 3 记录(Records)和密封类(Sealed classes)

Dart 3 引入了几个极其强大的语言特性,其中最耀眼、对我们日常开发改变最大的就是 记录(Records) 和 密封类(Sealed classes),它们配合 模式匹配(Pattern Matching),让 Dart 的表现力达到了现代编程语言(如 Swift、Kotlin、Rust

2026年06月29日 flutter

flutter的 Clean Architecture架构设计

Clean Architecture(清晰架构)是一种将应用程序分层的设计模式,强调关注点分离与依赖规则,通过将业务逻辑与框架、UI、数据源解耦,提升代码的可测试性、可维护性与可扩展性。在 Flutter/Dart 环境下,Clean Architecture 通

2025年12月22日 flutter

Riverpod 实战:如何优雅地实现网络请求的防抖与取消

在开发复杂的应用程序时,管理网络请求的生命周期至关重要。例如,用户在搜索框快速输入时可能会触发大量请求,或者在请求完成前离开页面,导致不必要的资源浪费。本文将介绍如何在 Riverpod 中利用 ref.onDispose 和“

WeChat

扫码加我微信

微信二维码