美文网首页Flutter
Dart常用数据类型之Map

Dart常用数据类型之Map

作者: chilim | 来源:发表于2019-04-28 21:38 被阅读24次

key-value键值对(可以使用相关联的key检索value值)的集合, 即传说中的字典
Map中key的数量是有限的,每个key正好有一个相关的value
Map、以及它的键和值,都是可以迭代的, 迭代的顺序由Map不同的类型定义
HashMap是无序的,这意味着它迭代的顺序是不确定的
LinkedHashMapkey的插入顺序进行迭代
SplayTreeMapkey的排序顺序进行迭代
当Map的一个操作正在执行的时候,通常不允许修改Map(添加或删除key)

创建Map

Map()
// 创建一个Map实例,默认实现是LinkedHashMap。
 
Map.from(Map other)
// 创建一个LinkedHashMap实例,包含other的所有键值对。
 
Map.fromIterable(Iterable iterable, {K key(element), V value(element)})
// 创建一个Map实例,其中Key和Value由iterable的元素计算得到。
 
Map.fromIterables(Iterable<K> keys, Iterable<V> values)
// 将指定的keys和values关联,创建一个Map实例。
 
Map.identity()
// 使用默认实现LinkedHashMap创建一个严格的Map。
 
Map.unmodifiable(Map other)
// 创建一个不可修改、基于哈希值的Map,包含other所有的项

具体使用

// 创建一个Map实例, 插入顺序进行排列
  var dic = new Map();
  print(dic);  // {}
 
  // 根据一个Map创建一个新的Map, 插入顺序进行排列
  var dic1 = new Map.from({'name': 'titan'});
  print(dic1);  // {name: titan}
 
  // 根据List创建Map, 插入顺序进行排列
  List<int> list = [1, 2, 3];
  // 使用默认方式, key和value都是数组对应的元素
  var dic2 = new Map.fromIterable(list);
  print(dic2);  // {1: 1, 2: 2, 3: 3}
  // 设置key和value的值
  var dic3 = new Map.fromIterable(list, key: (item) => item.toString(), value: (item) => item * item);
  print(dic3);  // {1: 1, 2: 4, 3: 9}
 
  // 两个数组映射一个字典, 插入顺序进行排列
  List<String> keys = ['name', 'age'];
  var values = ['jun', 20];
  // 如果有相同的key值, 后面的值会覆盖前面的值
  var dic4 = new Map.fromIterables(keys, values);
  print(dic4);  // {name: jun, age: 20}
 
  // 创建一个空的Map, Map允许null作为key
  var dic5 = new Map.identity();
  print(dic5);  //{}
 
  // 创建一个不可修改、基于哈希值的Map
  var dic6 = new Map.unmodifiable({'name': 'titan'});
  print(dic6);

 var map1 = {'name': 'titan', 'age': 20};
  // 哈希值
  print(map1.hashCode); 
 
  // 运行时类型
  print(map1.runtimeType);  //_InternalLinkedHashMap<String, Object>
 
  // 是否为空, null不能判断, 会报错
  print(map1.isEmpty);  // false
 
  // 是否不为空
  print(map1.isNotEmpty);  // true
 
  // 键值对个数
  print(map1.length);   // 2
 
  // 所有的key值, 返回Iterable<K>类型
  print(map1.keys.toList());  // [name, age]
 
  // 所有的value值, 返回Iterable<K>类型
  print(map1.values.toList());   // [titan, 20]
 
  // 根据key取值
  print(map1['name'] ?? '');   // titan
 
  // 根据key赋值
  map1['age'] = 30;
  print(map1); 

函数

 var map2 = {'name': 'titan', 'age': 20};
 
  // 添加一个map
  map2.addAll({'blog': 'titanjun'});
  print(map2);
  // {name: titan, age: 20, blog: titanjun}
 
  // 判断是否包含指定的key
  print(map2.containsKey('age'));  //
 
  // 判断是否包含指定的value
  print(map2.containsValue('titan'));
 
  // 操作每个键值对
  map2.forEach((key, value) {
    print('key = $key, value = $value');
  });
 
  // 查找key对应的value,或添加一个新的值为key.length的value
  for (var key in ['name', 'age', 'king']) {
    // 函数的返回值为查找到的对应的value值
    print(map2.putIfAbsent(key, () => key.length));
  }
  print(map2);
  // {name: titan, age: 20, blog: titanjun, king: 4}
 
  // 转成字符串
  print(map2.toString());
 
  // 删除键值对, 返回删除key对应的value值, 没有则返回null
  print(map2.remove('blog'));  //titanjun
  print(map2.remove('coder'));  //null
  print(map2);
 
  // 删除所有的键值对
  map2.clear();
  print(map2);  //{}

相关文章

  • Dart常用数据类型之Map

    key-value键值对(可以使用相关联的key检索value值)的集合, 即传说中的字典Map中key的数量是有...

  • Dart 2 (二) 数据类型

    数据类型 Dart中支持以下数据类型: Numbers Strings Booleans List(数组) Map...

  • Dart(三)数据类型

    数据类型 Dart中支持以下数据类型: Numbers Strings Booleans List(数组) Map...

  • Dart基础:可迭代的集合

    Dart中的集合类型 Dart中常用的集合类型:List、Set、Map。其中List、Set实现了Iterabl...

  • Flutter中Dart基础

    Flutter是基于Dart语音开发的,Dart是面向对象的语言,下面记录一些Dart语言常用数据类型的用法。 1...

  • 数字(num, int, double) Dart语言相较于其他语言,它只有三种数字类型,num, int, do...

  • Dart语言基础(二)之数据类型

    Dart语言之数据类型 数据类型 dart语言数据类型包含一下类型:变量-Var常量-Const数值型-Numbe...

  • Dart数据类型

    Dart中支持以下数据类型: Dart数据类型: Numbers数值类型intdouble 字符串类型 Strin...

  • Dart常用数据类型(一)

    Number(数值类型) int 整形 double 浮点型 String (字符串类型) String 字符串 ...

  • Flutter开发之Dart的数据类型02

    原文博客地址: Flutter开发之Dart的数据类型02 这几篇文章都是在学习Dart过程中所记录的学习笔记, ...

网友评论

    本文标题:Dart常用数据类型之Map

    本文链接:https://www.haomeiwen.com/subject/bdlsnqtx.html