最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 前端学习Dart|第五节

    正文概述 掘金(夜还不够黑丶)   2021-06-15   718

    前言

    本章节主要讲解知识点:Map对象、dart:convert、MapEntry、Javascript Map、自平衡二叉树

    视频地址:传送门

    Map

    Map对象是一个简单的键/值对,Map是动态集合。换句话说,Maps可以在运行时增长和缩小。

    可以通过两种方式声明Map

    • 使用Map构造函数
    • 使用Map字面量

    构造器声明

    Map对象可以使用构造器如下声明

    前端学习Dart|第五节

    字面量声明

    Map对象使用字面量声明如下:

    前端学习Dart|第五节

    修改操作

    构造函数初始化方式:

    前端学习Dart|第五节

    上述两种声明方式都可以以如下方法初始化Map对象

    前端学习Dart|第五节

    在Map键值对中,其中的“键”,也就是K,可以为任意类型(这里可以称为对象,因为所有类型都是对象),包括null。

    前端学习Dart|第五节

    如上赋值了两个类型的key, Map对象类型、null。都是可以的。

    这里可能需要提前了解一下var,还记得在最开始章节讲var的时候使用var声明变量,在Dart编译过程中会进行类型推断,在Map类型中也是这样的。但是有一点点不同,因为Map对象有两种类型:key,value

    看一下这个例子:

    前端学习Dart|第五节

    Dart 会将 a 的类型推断为 Map<String, String>, 如果尝试在上面的 map 中添加错误类型,那么分析器或者运行时会引发错误。其余的知识点将在泛型章节讲解。提前预知一下。

    常用属性及方法

    Map.from()

    克隆一个 Map,通过 Map.from() 仅仅能够实现浅克隆。

    前端学习Dart|第五节

    对于深克隆,我们可以简单的这样去处理:

    前端学习Dart|第五节

    dart: convert

    解码(JSON String->Object)

    前端学习Dart|第五节

    编码(Object->JSON String): 支持int, double, String, bool, null, List, Map (with string keys)

    前端学习Dart|第五节

    解码(UTF-8)

    前端学习Dart|第五节

    编码(UTF-8)

    前端学习Dart|第五节

    fromIterable()

    从Iterable类型生成Map对象

    前端学习Dart|第五节

    fromIterables()

    从两个Iterable类型生成Map对象,一个为key参照,一个为value参照。两个Iterable类型长度必须一致。

    前端学习Dart|第五节

    keys

    获取所有的keys,根据上一节课讲解的List对象理论来讲,这里返回的keys也是Iterable类型,并不是直接返回List对象类型。

    前端学习Dart|第五节

    values

    获取所有的values,返回Iterable类型

    前端学习Dart|第五节

    isEmpty

    判断Map对象是否为空

    remove()

    删除指定key的数据

    前端学习Dart|第五节

    addAll()

    合并指定Map对象

    前端学习Dart|第五节

    containsValue()

    判断在Map对象中是否有指定的值,返回bool类型

    前端学习Dart|第五节

    containsKey()

    判断在Map对象中是否有指定的key,返回bool类型

    前端学习Dart|第五节

    length

    返回在map中键值对的数量

    前端学习Dart|第五节

    forEach()

    循环map中的键值对,内部函数参数分别为key、value,函数为void 无返回值

    forEach循环中不可以删除或修改key的值

    前端学习Dart|第五节

    updateAll()

    根据函数规则更新所有的

    前端学习Dart|第五节

    map

    语法:

    前端学习Dart|第五节

    map() 遍历每个键值对 根据参数函数,对key、value做出修改,转换成其他Map。转换的Map可以是其他类型。

    MapEntry

    创建一条键值对,也可以说为一条键值对的表示。我们先确定一下概念,Map对象是键值对的集合,是个集合。MapEntry表示一条键值对。

    前端学习Dart|第五节

    当然MapEntry有自己的属性及方法:key、value等.

    多个MapEntry即为entries。看一下语法

    前端学习Dart|第五节

    可知entries为Iterable类型。单个MapEntry意义不大,多个必须为Iterable类型。这样的话方便迭代。

    fromEntries()

    也可以通过多个MapEntry生成Map对象

    前端学习Dart|第五节

    为什么Iterable类型转换成Map类型后,同样的forEach难道都是Iterable 的forEach?

    是的,只不过迭代顺序概念上有些区别

    List:迭代按照索引顺序。

    Map:

    • 普通的hashMap是无序的
    • LinkedHashMap迭代顺序为key插入的顺序
    • SplayTreeMap 自平衡二叉树中的 - 伸展树?

    Map对象的迭代顺序属于第二种。

    自平衡二叉树

    这个东西没有百度百科讲的好,直接看视频:传送门

    那么Dart中的SplayTreeMap是什么样的呢:

    对于经常存储和访问的数据(如缓存),SplayTreeMap是一个不错的选择。 原因是他们使用树旋转将一个元素调到根,以便更频繁地访问。 性能来自树的自我优化。 也就是说,频繁访问的元素移动到更靠近顶部。 但是,如果同时经常访问树,那么使用SplayTreeMap几乎没有意义。

    举个例子,调制解调器路由器以非常高的速率接收网络数据包。 调制解调器必须决定哪个数据包进入哪个线路。 这可以使用map实现,其中键是IP,值是目标线路。 对于这种情况,SplayTreeMap是一个不错的选择,因为大多数IP地址将被多次使用,因此可以从树的根目录找到它们。

    javascript Map

    Object

    javascript中的Object本质上解为键值对的集合,

    键的话只可以为字符串或者Symbol值。Symbol类型的key在上一节课的时候讲到了一个Symbol.iterator。

    前端学习Dart|第五节

    这本身会有很大的限制。所以为了解决这个问题,ES6 提供了 Map 数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object 结构提供了“字符串—值”的对应,Map 结构提供了“值—值”的对应。如果你需要“键值对”的数据结构,Map 比 Object 更合适。

    Map

    javascript中的Map大家都比较了解,这里讲解一点。

    Map.keys在javascript中返回的依然是迭代协议。上面Dart Map对象中的keys返回为Iterable类型,这里与Iterable章节内容相呼应。

    前端学习Dart|第五节

    javascript中Map的遍历顺序就是插入顺序。

    END

    本章节主要讲解知识点:Map对象、dart:convert、MapEntry、Javascript Map、自平衡二叉树。


    起源地下载网 » 前端学习Dart|第五节

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元