7.5 Map
map 类似于其它语言中的字典(Dictionary) 和列表有序不同,它是无序的。 map 是以键值对的形式存储的
7.5.1 创建
键和值可以是任何类型的对象。如果出现相同的 key, 则后出现的 key 和值会覆盖前面相同的 key 和值。 key 是必须已存在的变量或常量。 强烈建议使用字符串作为 key。
void main(List<String> args) {
// 字面量健
var age = 18;
final person = {
"name": "jack",
// 'name': 'rose', // 出现相同的key,会覆盖前面相同的key与值
age: 20,
"work": ["iOS", "Flutter", "打杂"]
};
print(person);
// 使用Map定义
final info = Map();
info['name'] = 'tom';
print(info);
final map = Map<String, Object>();
map['first'] = "冠军";
print(map);
}
7.5.2 长度、判空
- length 表示键值对的数量
void main(List<String> args) {
final person = {"name": 'jack'};
print(person.length);
print(person.isEmpty);
print(person.isNotEmpty);
final info = Map<String, Object>();
print(info.length);
print(info.isEmpty);
print(info.isNotEmpty);
}
7.5.3 获取键与值
void main(List<String> args) {
final person = {"name": 'jack', 'age': 18};
print(person.keys);
print(person.values);
print(person['name']);
print(person['work'] == null); // 不存在的值为null
}
7.5.4 遍历
for in、for each
void main(List<String> args) {
final info = {"name": "jack", "age": 10};
for (var key in info.keys) {
print("key: $key - value: ${info[key]}");
}
info.forEach((key, value) {
print("key: $key - value: ${value}");
});
}
7.5.5 判断键值存在
void main(List<String> args) {
final info = {"name": "jack", "age": 10};
print(info.keys.contains("jack"));
print(info.keys.contains(0));
print(info.values.contains("10"));
print(info.values.contains("jack"));
print(info.containsKey("name"));
print(info.containsKey("jack"));
print(info.containsValue(10));
print(info.containsValue("10"));
}
7.5.6 增加成员
- put
- add
- update
void main(List<String> args) {
final map = Map<String, Object>();
print(map);
// 不存在成员,就增加
map['name'] = 'jack';
print(map);
// 存在就覆盖
map['name'] = 'rose';
print(map);
// 设置不存在就赋值,存在就不赋值
map.putIfAbsent("name", () => "tim");
print(map);
map.putIfAbsent("age", () => 18);
print(map);
map.addAll({
"work": ['Flutter', "iOS"],
});
print(map);
map.update("age", (value) => 20);
print(map);
}
7.5.7 删除成员
- remove
- clear
void main(List<String> args) {
final info = {'name': 'jack', 'age': 18, 'work': 'flutter'};
print(info);
// remove(key) 返回被删除的key对应的值
var result = info.remove("name");
print(result);
print(info);
// 删除不存在的key, 返回null
result = info.remove('title');
print(result);
print(info);
// 按条件删除
info.removeWhere((key, value) => value is int);
print(info);
// 清除所有
info.clear();
print(info);
}
7.5.8 常 Map
const 修饰的字典不能修改,只能读取。
void main(List<String> args) {
const map = {'name': 'jack', "age": 18};
try {
// map['name'] = 'tim';
// map.remove('name'); // 崩溃
map.putIfAbsent('name', () => 'tim'); // 崩溃
} catch (e) {
print(e.toString());
}
}