Dart基础 05 - Map类型

78 阅读2分钟

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());
  }
}